## Example of conversion of a legacy my.jsonnet file An example conversion of a legacy custom jsonnet file to release-0.8 format can be seen by viewing and comparing this [release-0.3 jsonnet file](./my.release-0.3.jsonnet) (when the github repo was under `https://github.com/coreos/kube-prometheus...`) and the corresponding [release-0.8 jsonnet file](./my.release-0.8.jsonnet). These two files have had necessary blank lines added so that they can be compared side-by-side and line-by-line on screen. The conversion covers both the change of stopping using ksonnet after release-0.3 and also the major migration after release-0.7 as described in [migration-guide.md](../migration-guide.md) The sample files are intended as an example of format conversion and not necessarily best practice for the files in release-0.3 or release-0.8. Below are three sample extracts of the conversion as an indication of the changes required.
release-0.3 | release-0.8 |
---|---|
```jsonnet local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + (import 'kube-prometheus/kube-prometheus-kubeadm.libsonnet') + (import 'kube-prometheus/kube-prometheus-static-etcd.libsonnet') + { _config+:: { // Override namespace namespace: 'monitoring', ``` | ```jsonnet local kp = (import 'kube-prometheus/main.libsonnet') + // kubeadm now achieved by setting platform value - see 9 lines below (import 'kube-prometheus/addons/static-etcd.libsonnet') + (import 'kube-prometheus/addons/podsecuritypolicies.libsonnet') + { values+:: { common+: { namespace: 'monitoring', }, // Add kubeadm platform-specific items, // including kube-contoller-manager and kube-scheduler discovery kubePrometheus+: { platform: 'kubeadm', }, ``` |
release-0.3 | release-0.8 |
---|---|
```jsonnet // Add additional ingresses // See https://github.com/coreos/kube-prometheus/... // tree/master/examples/ingress.jsonnet ingress+:: { alertmanager: ingress.new() + ingress.mixin.metadata.withName('alertmanager') + ingress.mixin.metadata.withNamespace($._config.namespace) + ingress.mixin.metadata.withAnnotations({ 'kubernetes.io/ingress.class': 'nginx-api', }) + ingress.mixin.spec.withRules( ingressRule.new() + ingressRule.withHost(alert_manager_host) + ingressRule.mixin.http.withPaths( ingressRuleHttpPath.new() + ingressRuleHttpPath.mixin.backend .withServiceName('alertmanager-operated') + ingressRuleHttpPath.mixin.backend.withServicePort(9093) ), ) + // Note we do not need a TLS secretName here as we are going to use the // nginx-ingress default secret which is a wildcard // secretName would need to be in the same namespace at this time, // see https://github.com/kubernetes/ingress-nginx/issues/2371 ingress.mixin.spec.withTls( ingressTls.new() + ingressTls.withHosts(alert_manager_host) ), ``` | ```jsonnet // Add additional ingresses // See https://github.com/prometheus-operator/kube-prometheus/... // blob/main/examples/ingress.jsonnet ingress+:: { alertmanager: { apiVersion: 'networking.k8s.io/v1', kind: 'Ingress', metadata: { name: 'alertmanager', namespace: $.values.common.namespace, annotations: { 'kubernetes.io/ingress.class': 'nginx-api', }, }, spec: { rules: [{ host: alert_manager_host, http: { paths: [{ path: '/', pathType: 'Prefix', backend: { service: { name: 'alertmanager-operated', port: { number: 9093, }, }, }, }], }, }], tls: [{ hosts: [alert_manager_host], }], }, }, ``` |
release-0.3 | release-0.8 |
---|---|
```jsonnet // Additional prometheus rules // See https://github.com/coreos/kube-prometheus/docs/... // developing-prometheus-rules-and-grafana-dashboards.md // // cat my-prometheus-rules.yaml | \ // gojsontoyaml -yamltojson | \ // jq . > my-prometheus-rules.json prometheusRules+:: { groups+: import 'my-prometheus-rules.json', }, }; ``` | ```jsonnet // Additional prometheus rules // See https://github.com/prometheus-operator/kube-prometheus/blob/main/... // docs/developing-prometheus-rules-and-grafana-dashboards.md... // #pre-rendered-rules // cat my-prometheus-rules.yaml | \ // gojsontoyaml -yamltojson | \ // jq . > my-prometheus-rules.json prometheusMe: { rules: { apiVersion: 'monitoring.coreos.com/v1', kind: 'PrometheusRule', metadata: { name: 'my-prometheus-rule', namespace: $.values.common.namespace, labels: { 'app.kubernetes.io/name': 'kube-prometheus', 'app.kubernetes.io/part-of': 'kube-prometheus', prometheus: 'k8s', role: 'alert-rules', }, }, spec: { groups: import 'my-prometheus-rules.json', }, }, }, }; ... + { ['prometheus-my-' + name]: kp.prometheusMe[name] for name in std.objectFields(kp.prometheusMe) } ``` |