Skip to content

Commit 5b4d48f

Browse files
committed
Apply review feedback
1 parent f95133a commit 5b4d48f

14 files changed

Lines changed: 223 additions & 62 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
/jsonnetfile.lock.json
88
/crds
99
/compiled
10+
/helm_values
1011

1112
# Antora
1213
/_archive

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,4 @@ $(test_instances):
8181

8282
.PHONY: clean
8383
clean: ## Clean the project
84-
rm -rf .cache compiled dependencies vendor helmcharts jsonnetfile*.json || true
84+
rm -rf .cache compiled dependencies vendor helmcharts helm_values jsonnetfile*.json || true

class/cloud-provider-openstack.yml

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,36 @@
11
parameters:
2+
_os_ccm_chart:
3+
"True":
4+
input_paths:
5+
- ${_base_directory}/helmcharts/openstack-cloud-controller-manager/${cloud_provider_openstack:charts:openstack-cloud-controller-manager:version}
6+
input_type: helm
7+
helm_params:
8+
name: openstack-ccm
9+
namespace: ${cloud_provider_openstack:namespace:name}
10+
helm_values_files:
11+
- ${_base_directory}/helm_values/ccm-values.yaml
12+
output_path: cloud-provider-openstack/10_ccm_helm_chart
13+
"False":
14+
input_type: jsonnet
15+
input_paths: []
16+
output_path: cloud-provider-openstack/
17+
18+
_os_csi_chart:
19+
"True":
20+
input_paths:
21+
- ${_base_directory}/helmcharts/openstack-cinder-csi/${cloud_provider_openstack:charts:openstack-cinder-csi:version}
22+
input_type: helm
23+
helm_params:
24+
name: cinder-csi
25+
namespace: ${cloud_provider_openstack:namespace:name}
26+
helm_values_files:
27+
- ${_base_directory}/helm_values/csi-values.yaml
28+
output_path: cloud-provider-openstack/20_csi_helm_chart
29+
"False":
30+
input_type: jsonnet
31+
input_paths: []
32+
output_path: cloud-provider-openstack/
33+
234
kapitan:
335
dependencies:
436
- type: helm
@@ -17,21 +49,11 @@ parameters:
1749
input_type: jsonnet
1850
output_path: .
1951
- input_paths:
20-
- ${_base_directory}/helmcharts/openstack-cloud-controller-manager/${cloud_provider_openstack:charts:openstack-cloud-controller-manager:version}
21-
input_type: helm
22-
helm_values: ${cloud_provider_openstack:ccm:helm_values}
23-
helm_params:
24-
name: openstack-ccm
25-
namespace: ${cloud_provider_openstack:namespace}
26-
output_path: cloud-provider-openstack/10_ccm_helm_chart
27-
- input_paths:
28-
- ${_base_directory}/helmcharts/openstack-cinder-csi/${cloud_provider_openstack:charts:openstack-cinder-csi:version}
29-
input_type: helm
30-
helm_values: ${cloud_provider_openstack:csi:helm_values}
31-
helm_params:
32-
name: cinder-csi
33-
namespace: ${cloud_provider_openstack:namespace}
34-
output_path: cloud-provider-openstack/20_csi_helm_chart
52+
- ${_base_directory}/component/render-helm-values.jsonnet
53+
input_type: jsonnet
54+
output_path: ${_base_directory}/helm_values/
55+
- ${_os_ccm_chart:${cloud_provider_openstack:ccm:enabled}}
56+
- ${_os_csi_chart:${cloud_provider_openstack:csi:enabled}}
3557
- input_paths:
3658
- ${_base_directory}/component/main.jsonnet
3759
input_type: jsonnet

class/defaults.yml

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ parameters:
22
cloud_provider_openstack:
33
=_metadata:
44
multi_tenant: true
5-
namespace: syn-cloud-provider-openstack
5+
namespace:
6+
name: syn-cloud-provider-openstack
7+
labels: {}
8+
annotations: {}
69

710
charts:
811
openstack-cloud-controller-manager:
@@ -34,6 +37,7 @@ parameters:
3437
route: {}
3538

3639
ccm:
40+
enabled: true
3741
cluster_name: ${cluster:name}
3842
service_account_name: cloud-controller-manager
3943
resources:
@@ -48,10 +52,10 @@ parameters:
4852
node_selector:
4953
node-role.kubernetes.io/control-plane: ""
5054
tolerations:
51-
- key: node.cloudprovider.kubernetes.io/uninitialized
55+
node.cloudprovider.kubernetes.io/uninitialized:
5256
value: "true"
5357
effect: NoSchedule
54-
- key: node-role.kubernetes.io/control-plane
58+
node-role.kubernetes.io/control-plane:
5559
effect: NoSchedule
5660
service_monitor:
5761
enabled: false
@@ -70,24 +74,31 @@ parameters:
7074
repository: ${cloud_provider_openstack:images:openstack_cloud_controller_manager:registry}/${cloud_provider_openstack:images:openstack_cloud_controller_manager:repository}
7175
tag: ${cloud_provider_openstack:images:openstack_cloud_controller_manager:tag}
7276
resources: ${cloud_provider_openstack:ccm:resources}
73-
enabledControllers: ${cloud_provider_openstack:ccm:enabled_controllers}
7477
logVerbosityLevel: ${cloud_provider_openstack:ccm:log_verbosity_level}
7578
nodeSelector: ${cloud_provider_openstack:ccm:node_selector}
76-
tolerations: ${cloud_provider_openstack:ccm:tolerations}
7779
serviceMonitor: ${cloud_provider_openstack:ccm:service_monitor}
7880
extraVolumes: ${cloud_provider_openstack:ccm:extra_volumes}
7981
extraVolumeMounts: ${cloud_provider_openstack:ccm:extra_volume_mounts}
8082

8183
csi:
84+
enabled: true
8285
cluster_id: ${cluster:name}
8386
fs_type: ext4
8487
volume_binding_mode: WaitForFirstConsumer
8588
log_verbosity_level: 2
8689
pod_monitor:
8790
enabled: false
8891
additionalLabels: {}
89-
node_driver_daemonset_tolerations:
90-
- operator: Exists
92+
controller_plugin:
93+
node_selector:
94+
node-role.kubernetes.io/control-plane: ""
95+
tolerations:
96+
node-role.kubernetes.io/control-plane:
97+
effect: NoSchedule
98+
node_plugin:
99+
tolerations:
100+
"":
101+
operator: Exists
91102
resources:
92103
controller:
93104
csi-provisioner:
@@ -155,12 +166,4 @@ parameters:
155166
httpEndpoint:
156167
enabled: ${cloud_provider_openstack:csi:pod_monitor:enabled}
157168
port: 8080
158-
controllerPlugin:
159-
nodeSelector:
160-
node-role.kubernetes.io/control-plane: ""
161-
tolerations:
162-
- key: node-role.kubernetes.io/control-plane
163-
effect: NoSchedule
164-
nodePlugin:
165-
tolerations: ${cloud_provider_openstack:csi:node_driver_daemonset_tolerations}
166169
podMonitor: ${cloud_provider_openstack:csi:pod_monitor}

component/app.jsonnet

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ local inv = kap.inventory();
33
local params = inv.parameters.cloud_provider_openstack;
44
local argocd = import 'lib/argocd.libjsonnet';
55

6-
local app = argocd.App('cloud-provider-openstack', params.namespace, secrets=true);
6+
local app = argocd.App('cloud-provider-openstack', params.namespace);
77

88
local appPath =
99
local project = std.get(std.get(app, 'spec', {}), 'project', 'syn');

component/main.jsonnet

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ local renderValue(k, v) =
99
if v == null then []
1010
else if std.isArray(v) then
1111
[ '%s=%s' % [ k, item ] for item in v if item != null ]
12-
else if std.isBoolean(v) then
13-
[ '%s=%s' % [ k, if v then 'true' else 'false' ] ]
12+
else if std.isObject(v) then
13+
error 'cloud_conf value for key "%s" must be scalar or array, got object' % k
1414
else
15-
[ '%s=%s' % [ k, std.toString(v) ] ];
15+
[ '%s=%s' % [ k, v ] ];
1616

1717
local renderSection(name, dict) =
1818
local lines = std.flattenArrays(
@@ -42,7 +42,7 @@ local renderCloudConf() =
4242

4343
local secret = kube.Secret(params.cloud_config_secret_name) {
4444
metadata+: {
45-
namespace: params.namespace,
45+
namespace: params.namespace.name,
4646
},
4747
data:: {},
4848
stringData: {
@@ -74,17 +74,32 @@ local storageClasses = [
7474

7575
local volumeSnapshotClasses = [
7676
local vsc = params.csi.volume_snapshot_classes[name];
77+
local vscParams = std.get(vsc, 'parameters', {});
7778
kube._Object('snapshot.storage.k8s.io/v1', 'VolumeSnapshotClass', name) {
7879
driver: 'cinder.csi.openstack.org',
7980
deletionPolicy: vsc.deletion_policy,
80-
[if std.length(vsc.parameters) > 0 then 'parameters']: vsc.parameters,
81+
[if std.length(vscParams) > 0 then 'parameters']: vscParams,
8182
}
8283
for name in std.objectFields(params.csi.volume_snapshot_classes)
8384
];
8485

86+
local namespace = kube.Namespace(params.namespace.name) {
87+
metadata+: {
88+
labels+: {
89+
[k]: params.namespace.labels[k]
90+
for k in std.objectFields(params.namespace.labels)
91+
if params.namespace.labels[k] != null
92+
},
93+
annotations+: {
94+
[k]: params.namespace.annotations[k]
95+
for k in std.objectFields(params.namespace.annotations)
96+
if params.namespace.annotations[k] != null
97+
},
98+
},
99+
};
100+
85101
{
86-
[if params.namespace != 'kube-system' then '00_namespace']:
87-
kube.Namespace(params.namespace),
102+
[if params.namespace.name != 'kube-system' then '00_namespace']: namespace,
88103
'01_secret': secret,
89104
[if std.length(params.csi.storage_classes) > 0 then '10_storageclasses']:
90105
storageClasses,
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
local com = import 'lib/commodore.libjsonnet';
2+
local kap = import 'lib/kapitan.libjsonnet';
3+
4+
local inv = kap.inventory();
5+
local params = inv.parameters.cloud_provider_openstack;
6+
7+
local renderTolerations(tol) =
8+
[
9+
std.prune({ key: k } + tol[k])
10+
for k in std.objectFields(tol)
11+
if tol[k] != null
12+
];
13+
14+
local ccm_values = params.ccm.helm_values {
15+
enabledControllers: com.renderArray(params.ccm.enabled_controllers),
16+
tolerations: renderTolerations(params.ccm.tolerations),
17+
};
18+
19+
local csi_values = params.csi.helm_values {
20+
csi+: {
21+
plugin+: {
22+
controllerPlugin: {
23+
nodeSelector: std.prune(params.csi.controller_plugin.node_selector),
24+
tolerations: renderTolerations(params.csi.controller_plugin.tolerations),
25+
},
26+
nodePlugin: {
27+
tolerations: renderTolerations(params.csi.node_plugin.tolerations),
28+
},
29+
},
30+
},
31+
};
32+
33+
{
34+
'ccm-values': ccm_values,
35+
'csi-values': csi_values,
36+
}

docs/modules/ROOT/pages/index.adoc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
= cloud-provider-openstack
1+
= Cloud Provider OpenStack
22

33
cloud-provider-openstack is a Commodore component to manage the https://github.com/kubernetes/cloud-provider-openstack[OpenStack Cloud Controller Manager] (CCM) and https://github.com/kubernetes/cloud-provider-openstack[Cinder CSI driver].
44

5-
Both sub-components are enabled by default and share a single `cloud.conf` Secret.
5+
The CCM and CSI driver are deployed into the same namespace and share a single `cloud.conf` Secret.
6+
Each sub-component is toggleable via the `ccm.enabled` and `csi.enabled` parameters.
67
The CCM handles node initialization, node lifecycle, LoadBalancer Services (via Octavia), and optionally pod routes.
78
The CSI driver provides persistent block storage using OpenStack Cinder volumes, with configurable StorageClasses and VolumeSnapshotClasses.
89

0 commit comments

Comments
 (0)