Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .cruft.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
"name": "csi-cloudscale",
"slug": "csi-cloudscale",
"parameter_key": "csi_cloudscale",
"test_cases": "defaults",
"test_cases": "defaults openshift4",
"add_lib": "n",
"add_pp": "n",
"add_golden": "y",
"add_matrix": "n",
"add_matrix": "y",
"add_go_unit": "n",
"copyright_holder": "VSHN AG <info@vshn.ch>",
"copyright_year": "2021",
Expand Down
14 changes: 12 additions & 2 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ jobs:
args: 'check'
test:
runs-on: ubuntu-latest
strategy:
matrix:
instance:
- defaults
- openshift4
defaults:
run:
working-directory: ${{ env.COMPONENT_NAME }}
Expand All @@ -37,9 +42,14 @@ jobs:
with:
path: ${{ env.COMPONENT_NAME }}
- name: Compile component
run: make test
run: make test -e instance=${{ matrix.instance }}
golden:
runs-on: ubuntu-latest
strategy:
matrix:
instance:
- defaults
- openshift4
defaults:
run:
working-directory: ${{ env.COMPONENT_NAME }}
Expand All @@ -48,4 +58,4 @@ jobs:
with:
path: ${{ env.COMPONENT_NAME }}
- name: Golden diff
run: make golden-diff
run: make golden-diff -e instance=${{ matrix.instance }}
16 changes: 16 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,22 @@ golden-diff: commodore_args += -f tests/$(instance).yml
golden-diff: clean .compile ## Diff compile output against the reference version. Review output and run `make gen-golden golden-diff` if this target fails.
@git diff --exit-code --minimal --no-index -- tests/golden/$(instance) compiled/

.PHONY: golden-diff-all
golden-diff-all: recursive_target=golden-diff
golden-diff-all: $(test_instances) ## Run golden-diff for all instances. Note: this doesn't work when running make with multiple parallel jobs (-j != 1).

.PHONY: gen-golden-all
gen-golden-all: recursive_target=gen-golden
gen-golden-all: $(test_instances) ## Run gen-golden for all instances. Note: this doesn't work when running make with multiple parallel jobs (-j != 1).

.PHONY: lint_kubent_all
lint_kubent_all: recursive_target=lint_kubent
lint_kubent_all: $(test_instances) ## Lint deprecated Kubernetes API versions for all golden test instances. Will exit on first error. Note: this doesn't work when running make with multiple parallel jobs (-j != 1).

.PHONY: $(test_instances)
$(test_instances):
$(MAKE) $(recursive_target) -e instance=$(basename $(@F))

.PHONY: clean
clean: ## Clean the project
rm -rf .cache compiled dependencies vendor helmcharts jsonnetfile*.json || true
1 change: 1 addition & 0 deletions Makefile.vars.mk
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,4 @@ KUBENT_IMAGE ?= ghcr.io/doitintl/kube-no-trouble:latest
KUBENT_DOCKER ?= $(DOCKER_CMD) $(DOCKER_ARGS) $(root_volume) --entrypoint=/app/kubent $(KUBENT_IMAGE)

instance ?= defaults
test_instances = tests/defaults.yml tests/openshift4.yml
25 changes: 20 additions & 5 deletions class/csi-cloudscale.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,30 @@
parameters:
kapitan:
dependencies:
- type: https
source: https://raw.githubusercontent.com/cloudscale-ch/csi-cloudscale/master/deploy/kubernetes/releases/csi-cloudscale-${csi_cloudscale:version}.yaml
output_path: dependencies/csi-cloudscale/manifests/${csi_cloudscale:version}/deploy.yaml
- type: helm
source: ${csi_cloudscale:charts:csi-cloudscale:source}
chart_name: csi-cloudscale
output_path: ${_base_directory}/helmcharts/csi-cloudscale/${csi_cloudscale:charts:csi-cloudscale:version}
compile:
- input_paths:
- csi-cloudscale/component/app.jsonnet
- ${_base_directory}/component/app.jsonnet
input_type: jsonnet
output_path: apps/
- input_paths:
- csi-cloudscale/component/main.jsonnet
- ${_base_directory}/helmcharts/csi-cloudscale/${csi_cloudscale:charts:csi-cloudscale:version}
input_type: helm
helm_values: ${csi_cloudscale:helm_values}
helm_params:
name: csi-cloudscale
namespace: ${csi_cloudscale:namespace}
output_path: csi-cloudscale/01_helm_chart
- input_paths:
- ${_base_directory}/component/main.jsonnet
input_type: jsonnet
output_path: csi-cloudscale/
commodore:
postprocess:
filters:
- type: jsonnet
filter: postprocess/driver_daemonset_tolerations.jsonnet
path: csi-cloudscale/01_helm_chart/csi-cloudscale/templates
44 changes: 43 additions & 1 deletion class/defaults.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,23 @@
parameters:
csi_cloudscale:
namespace: syn-csi-cloudscale
version: v3.5.0

charts:
csi-cloudscale:
source: https://cloudscale-ch.github.io/csi-cloudscale
version: 1.3.3

images:
cloudscale-csi-plugin:
registry: quay.io
repository: cloudscalech/cloudscale-csi-plugin
tag: v3.5.0

api_token: ?{vaultkv:${cluster:tenant}/${cluster:name}/cloudscale/token}
api_token_secret_name: cloudscale
fs_type: ext4
driver_daemonset_tolerations: {}

resources:
controller:
csi-provisioner:
Expand Down Expand Up @@ -32,3 +45,32 @@ parameters:
requests:
cpu: 20m
memory: 32Mi

helm_values:
# Set nameOverride to avoid resource names like
# `csi-cloudscale-csi-cloudscale-controller-sa`.
nameOverride: csi-cloudscale
cloudscale:
token:
# Secret managed by the component in `main.jsonnet`
existingSecret: ${csi_cloudscale:api_token_secret_name}
csi:
# Disable chart-managed storageclasses, we manage them directly in
# the component
storageClasses: []
provisioner:
resources: ${csi_cloudscale:resources:controller:csi-provisioner}
attacher:
resources: ${csi_cloudscale:resources:controller:csi-attacher}
resizer:
resources: ${csi_cloudscale:resources:controller:csi-resizer}
controller:
serviceAccountName: csi-cloudscale-controller-sa
image: ${csi_cloudscale:images:cloudscale-csi-plugin}
resources: ${csi_cloudscale:resources:controller:csi-cloudscale-plugin}
node:
serviceAccountName: csi-cloudscale-node-sa
image: ${csi_cloudscale:images:cloudscale-csi-plugin}
resources: ${csi_cloudscale:resources:csi_driver:csi-cloudscale-plugin}
driverRegistrar:
resources: ${csi_cloudscale:resources:csi_driver:csi-node-driver-registrar}
117 changes: 11 additions & 106 deletions component/main.jsonnet
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ local storageclasses = [ [
} + config,
] for type in [ 'ssd', 'bulk' ] ];

local secret = kube.Secret('cloudscale') {
local secret = kube.Secret(params.api_token_secret_name) {
metadata+: {
namespace: params.namespace,
},
Expand All @@ -41,106 +41,33 @@ local secret = kube.Secret('cloudscale') {
},
};

local manifests = std.parseJson(
kap.yaml_load_stream('csi-cloudscale/manifests/' + params.version + '/deploy.yaml')
);

local customRBAC = if isOpenshift then [
kube.RoleBinding('csi-hostnetwork') {
roleRef_: kube.ClusterRole('system:openshift:scc:hostnetwork'),
subjects: [ {
kind: 'ServiceAccount',
name: std.filter(
function(obj) obj.kind == 'StatefulSet', manifests
)[0].spec.template.spec.serviceAccount,
name: params.helm_values.controller.serviceAccountName,
namespace: params.namespace,
} ],
},
kube.RoleBinding('csi-privileged') {
roleRef_: kube.ClusterRole('system:openshift:scc:privileged'),
subjects: [ {
kind: 'ServiceAccount',
name: std.filter(
function(obj) obj.kind == 'DaemonSet', manifests
)[0].spec.template.spec.serviceAccount,
name: params.helm_values.node.serviceAccountName,
namespace: params.namespace,
} ],
},
] else [];

local patch_manifest(object) =
local tolerations = params.driver_daemonset_tolerations;
local resourcesInParams = if object.kind == 'DaemonSet' then
params.resources.csi_driver
else if object.kind == 'StatefulSet' then
params.resources.controller
local warnDeprecatedParam(o) =
if std.objectHas(params, 'version') then
std.trace(
'Component parameter `version` is removed and its value is ignored. Please use parameters `charts` and `images` to override the csi-cloudscale version.',
o
)
else
null;
local resources =
if (
resourcesInParams != null
&& (
std.length(object.spec.template.spec.containers) !=
std.length(std.objectFields(resourcesInParams))
)
) then
std.trace(
(
'The number of containers in the csi-cloudscale upstream manifest "%s" changed. '
+ 'Please check the default resource requests and limits configured in the component.'
) % (
object.metadata.name
),
resourcesInParams
)
else
resourcesInParams;
if (
object.kind == 'DaemonSet'
&& object.metadata.name == 'csi-cloudscale-node'
) then
object {
spec+: {
template+: {
spec+: {
containers: [
c {
resources+: std.prune(
com.getValueOrDefault(resources, c.name, {})
),
}
for c in super.containers
],
tolerations+: [
tolerations[t] {
key: t,
}
for t in std.objectFields(tolerations)
],
},
},
},
}
else if (
object.kind == 'StatefulSet'
&& object.metadata.name == 'csi-cloudscale-controller'
) then
object {
spec+: {
template+: {
spec+: {
containers: [
c {
resources+: com.getValueOrDefault(resources, c.name, {}),
}
for c in super.containers
],
},
},
},
}
else
object;
o;

{
[if params.namespace != 'kube-system' then '00_namespace']: kube.Namespace(params.namespace) + if isOpenshift then {
Expand All @@ -151,28 +78,6 @@ local patch_manifest(object) =
},
} else {},
'01_storageclasses': std.flattenArrays(storageclasses),
'02_secret': secret,
'10_deployments': [
patch_manifest(object) {
metadata+: {
namespace: params.namespace,
},
}
for object in manifests
if std.setMember(object.kind, std.set([ 'StatefulSet', 'ServiceAccount', 'DaemonSet' ]))
],
'20_rbac': [
if std.objectHas(object, 'subjects') then object {
subjects: [
sub {
namespace: params.namespace,
}
for sub in object.subjects
],
}
else object
for object in manifests
if std.setMember(object.kind, std.set([ 'ClusterRole', 'ClusterRoleBinding' ]))
],
'02_secret': warnDeprecatedParam(secret),
[if std.length(customRBAC) > 0 then '30_custom_rbac']: customRBAC,
}
12 changes: 12 additions & 0 deletions docs/modules/ROOT/pages/how-tos/upgrade-3.x-to-4.x.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
= Upgrade from 3.x to 4.x

This guide describes the steps to perform an upgrade of the component from version 3.x to 4.x.

== Migration guide

Parameter `version` has been removed in component version v4.0.0.
If you use this parameter to deploy a specific version of the CSI driver, you should set parameter `images.cloudscale-csi-plugin.tag` to the desired version.

Alternatively, you may want to select a specific Helm chart version.
See the https://github.com/cloudscale-ch/csi-cloudscale/releases?q=helm-csi&expanded=true[helm-csi-cloudscale GitHub releases] for available Helm chart versions.
The chart version can be specified in parameter `charts.csi-cloudscale.version`.
2 changes: 1 addition & 1 deletion docs/modules/ROOT/pages/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ See https://github.com/cloudscale-ch/csi-cloudscale#kubernetes-compatibility["Ku

== StorageClasses

The following storage classess are set up by this component:
The following storage classes are set up by this component:

[cols="2,2a,2"]
|===
Expand Down
Loading