Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(rules): Implement declarative automated rules #231

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
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
2 changes: 2 additions & 0 deletions charts/cryostat/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ helm install cryostat ./charts/cryostat
| `core.discovery.kubernetes.portNames` | List of port names that the Cryostat application should look for in order to consider a target as JMX connectable | `[]` |
| `core.discovery.kubernetes.builtInPortNumbersDisabled` | When false and `portNumbers` is empty, the Cryostat application will use the default port number `9091` to look for JMX connectable targets. | `false` |
| `core.discovery.kubernetes.portNumbers` | List of port numbers that the Cryostat application should look for in order to consider a target as JMX connectable | `[]` |
| `core.config.declarative.fsMode` | default filesystem mode (permissions) for declarative configuration volumes | `440` |
| `core.config.rules.configMapNames` | List of ConfigMap names. Each ConfigMap is expected to contain one or more files, which are automated rule definitions, to be mounted to the Cryostat container. | `[]` |

### Report Generator Deployment

Expand Down
15 changes: 15 additions & 0 deletions charts/cryostat/templates/cryostat_deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,12 @@ spec:
failureThreshold: 18
resources:
{{- toYaml .Values.core.resources | nindent 12 }}
{{- if .Values.core.config.rules.configMapNames}}
volumeMounts:
- name: declarative-rules
mountPath: /opt/cryostat.d/rules.d
readOnly: true
{{- end }}
- name: {{ printf "%s-%s" .Chart.Name "grafana" }}
securityContext:
{{- toYaml .Values.grafana.securityContext | nindent 12 }}
Expand Down Expand Up @@ -216,3 +222,12 @@ spec:
secret:
secretName: {{ .Release.Name }}-proxy-tls
{{- end }}
- name: declarative-rules
projected:
defaultMode: {{ .Values.core.config.declarative.fsMode }}
sources:
{{- range .Values.core.config.rules.configMapNames}}
- configMap:
name: {{ . }}
optional: false
{{- end }}
57 changes: 55 additions & 2 deletions charts/cryostat/tests/cryostat_deployment_test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,8 @@ tests:
requests:
cpu: 500m
memory: 384Mi

- notExists:
path: spec.template.spec.contains[?(@.name=='cryostat')].volumeMounts
- it: should set log level
set:
core:
Expand Down Expand Up @@ -513,4 +514,56 @@ tests:
- equal:
path: spec.template.spec.containers[?(@.name=='cryostat-jfr-datasource')].imagePullPolicy
value: "IfNotPresent"

- it: should add volume mounts for declarative automated rules
set:
core.config.rules.configMapNames: ['a', 'b']
asserts:
- equal:
path: spec.template.spec.containers[?(@.name=='cryostat')].volumeMounts
value:
- name: declarative-rules
mountPath: /opt/cryostat.d/rules.d
readOnly: true
- equal:
path: spec.template.spec.volumes
value:
- name: alpha-config
configMap:
name: RELEASE-NAME-alpha-config
- name: declarative-rules
projected:
defaultMode: 0440
sources:
- configMap:
name: a
optional: false
- configMap:
name: b
optional: false
- it: should add volume mounts for declarative rules with a specific default fs mode
set:
core.config.rules.configMapNames: ['a', 'b']
core.config.declarative.fsMode: 0644
asserts:
- equal:
path: spec.template.spec.containers[?(@.name=='cryostat')].volumeMounts
value:
- name: declarative-rules
mountPath: /opt/cryostat.d/rules.d
readOnly: true
- equal:
path: spec.template.spec.volumes
value:
- name: alpha-config
configMap:
name: RELEASE-NAME-alpha-config
- name: declarative-rules
projected:
defaultMode: 0644
sources:
- configMap:
name: a
optional: false
- configMap:
name: b
optional: false
26 changes: 26 additions & 0 deletions charts/cryostat/values.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,32 @@
}
}
}
},
"config": {
"type": "object",
"properties": {
"declarative": {
"type": "object",
"properties": {
"fsMode": {
"type": "number",
"description": "default filesystem mode (permissions) for declarative configuration volumes",
"default": 440
}
}
},
"rules": {
"type": "object",
"properties": {
"configMapNames": {
"type": "array",
"description": "List of ConfigMap names. Each ConfigMap is expected to contain one or more files, which are automated rule definitions, to be mounted to the Cryostat container.",
"default": [],
"items": {}
}
}
}
}
}
}
},
Expand Down
7 changes: 7 additions & 0 deletions charts/cryostat/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,13 @@ core:
builtInPortNumbersDisabled: false
## @param core.discovery.kubernetes.portNumbers [array] List of port numbers that the Cryostat application should look for in order to consider a target as JMX connectable
portNumbers: []
config:
declarative:
## @param core.config.declarative.fsMode default filesystem mode (permissions) for declarative configuration volumes
fsMode: 0440
rules:
## @param core.config.rules.configMapNames [array] List of ConfigMap names. Each ConfigMap is expected to contain one or more files, which are automated rule definitions, to be mounted to the Cryostat container.
configMapNames: []

## @section Report Generator Deployment
## @extra reports Configuration for the Reports Generator deployment
Expand Down