diff --git a/chart/templates/collections.composition-tablist.yaml b/chart/templates/collections.composition-tablist.yaml index 1fe69c7..0ad8b3c 100644 --- a/chart/templates/collections.composition-tablist.yaml +++ b/chart/templates/collections.composition-tablist.yaml @@ -41,4 +41,10 @@ spec: resource: collections name: composition-{{ .Release.Name }}-tabpane-yamlviewer namespace: {{ .Release.Namespace }} + {{- end }} + {{- if .Values.finops.enabled }} + - apiVersion: templates.krateo.io/v1alpha1 + resource: collections + name: composition-{{ .Release.Name }}-tabpane-finops + namespace: {{ .Release.Namespace }} {{- end }} \ No newline at end of file diff --git a/chart/templates/collections.composition-tabpane-finops-panel-row-1-column-1-panel.yaml b/chart/templates/collections.composition-tabpane-finops-panel-row-1-column-1-panel.yaml new file mode 100644 index 0000000..06bfa09 --- /dev/null +++ b/chart/templates/collections.composition-tabpane-finops-panel-row-1-column-1-panel.yaml @@ -0,0 +1,23 @@ +{{- if .Values.finops.enabled }} +apiVersion: v1 +data: + title: "Total Composition Cost" +kind: ConfigMap +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-1-panel +--- +apiVersion: templates.krateo.io/v1alpha1 +kind: Collection +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-1-panel +spec: + propsRef: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-1-panel + namespace: {{ .Release.Namespace }} + type: panel + widgetsRefs: + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-1-panel-chartpie + namespace: {{ .Release.Namespace }} + resource: widgets +{{- end }} \ No newline at end of file diff --git a/chart/templates/collections.composition-tabpane-finops-panel-row-1-column-1.yaml b/chart/templates/collections.composition-tabpane-finops-panel-row-1-column-1.yaml new file mode 100644 index 0000000..a3fdff5 --- /dev/null +++ b/chart/templates/collections.composition-tabpane-finops-panel-row-1-column-1.yaml @@ -0,0 +1,23 @@ +{{- if .Values.finops.enabled }} +apiVersion: v1 +data: + width: "6" +kind: ConfigMap +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-1 +--- +apiVersion: templates.krateo.io/v1alpha1 +kind: Collection +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-1 +spec: + propsRef: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-1 + namespace: {{ .Release.Namespace }} + type: column + widgetsRefs: + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-rpanel-row-1-column-1-panel + namespace: {{ .Release.Namespace }} + resource: collections +{{- end }} \ No newline at end of file diff --git a/chart/templates/collections.composition-tabpane-finops-panel-row-1-column-2-panel.yaml b/chart/templates/collections.composition-tabpane-finops-panel-row-1-column-2-panel.yaml new file mode 100644 index 0000000..b35e769 --- /dev/null +++ b/chart/templates/collections.composition-tabpane-finops-panel-row-1-column-2-panel.yaml @@ -0,0 +1,23 @@ +{{- if .Values.finops.enabled }} +apiVersion: v1 +data: + title: "Resources Usage" +kind: ConfigMap +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-2-panel +--- +apiVersion: templates.krateo.io/v1alpha1 +kind: Collection +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-2-panel +spec: + propsRef: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-2-panel + namespace: {{ .Release.Namespace }} + type: panel + widgetsRefs: + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-2-panel-chartline + namespace: {{ .Release.Namespace }} + resource: widgets +{{- end }} \ No newline at end of file diff --git a/chart/templates/collections.composition-tabpane-finops-panel-row-1-column-2.yaml b/chart/templates/collections.composition-tabpane-finops-panel-row-1-column-2.yaml new file mode 100644 index 0000000..a5e2700 --- /dev/null +++ b/chart/templates/collections.composition-tabpane-finops-panel-row-1-column-2.yaml @@ -0,0 +1,23 @@ +{{- if .Values.finops.enabled }} +apiVersion: v1 +data: + width: "16" +kind: ConfigMap +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-2 +--- +apiVersion: templates.krateo.io/v1alpha1 +kind: Collection +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-2 +spec: + propsRef: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-2 + namespace: {{ .Release.Namespace }} + type: column + widgetsRefs: + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-2-panel + namespace: {{ .Release.Namespace }} + resource: collections +{{- end }} \ No newline at end of file diff --git a/chart/templates/collections.composition-tabpane-finops-panel-row-1.yaml b/chart/templates/collections.composition-tabpane-finops-panel-row-1.yaml new file mode 100644 index 0000000..2ca08dd --- /dev/null +++ b/chart/templates/collections.composition-tabpane-finops-panel-row-1.yaml @@ -0,0 +1,17 @@ +{{- if .Values.finops.enabled }} +apiVersion: templates.krateo.io/v1alpha1 +kind: Collection +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1 +spec: + type: row + widgetsRefs: + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-1 + namespace: {{ .Release.Namespace }} + resource: collections + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-2 + namespace: {{ .Release.Namespace }} + resource: collections +{{- end }} \ No newline at end of file diff --git a/chart/templates/collections.composition-tabpane-finops-panel-row-2-column-1-panel.yaml b/chart/templates/collections.composition-tabpane-finops-panel-row-2-column-1-panel.yaml new file mode 100644 index 0000000..a9e40a8 --- /dev/null +++ b/chart/templates/collections.composition-tabpane-finops-panel-row-2-column-1-panel.yaml @@ -0,0 +1,13 @@ +{{- if .Values.finops.enabled }} +apiVersion: templates.krateo.io/v1alpha1 +kind: Collection +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-1-panel +spec: + type: panel + widgetsRefs: + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-1-panel-paragraph + namespace: {{ .Release.Namespace }} + resource: widgets +{{- end }} \ No newline at end of file diff --git a/chart/templates/collections.composition-tabpane-finops-panel-row-2-column-1.yaml b/chart/templates/collections.composition-tabpane-finops-panel-row-2-column-1.yaml new file mode 100644 index 0000000..e749fad --- /dev/null +++ b/chart/templates/collections.composition-tabpane-finops-panel-row-2-column-1.yaml @@ -0,0 +1,23 @@ +{{- if .Values.finops.enabled }} +apiVersion: v1 +data: + width: "6" +kind: ConfigMap +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-1 +--- +apiVersion: templates.krateo.io/v1alpha1 +kind: Collection +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-1 +spec: + propsRef: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-1 + namespace: {{ .Release.Namespace }} + type: column + widgetsRefs: + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-rpanel-row-2-column-1-panel + namespace: {{ .Release.Namespace }} + resource: collections +{{- end }} \ No newline at end of file diff --git a/chart/templates/collections.composition-tabpane-finops-panel-row-2-column-2-panel.yaml b/chart/templates/collections.composition-tabpane-finops-panel-row-2-column-2-panel.yaml new file mode 100644 index 0000000..4fd42df --- /dev/null +++ b/chart/templates/collections.composition-tabpane-finops-panel-row-2-column-2-panel.yaml @@ -0,0 +1,13 @@ +{{- if .Values.finops.enabled }} +apiVersion: templates.krateo.io/v1alpha1 +kind: Collection +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-2-panel +spec: + type: panel + widgetsRefs: + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-2-panel-paragraph + namespace: {{ .Release.Namespace }} + resource: widgets +{{- end }} \ No newline at end of file diff --git a/chart/templates/collections.composition-tabpane-finops-panel-row-2-column-2.yaml b/chart/templates/collections.composition-tabpane-finops-panel-row-2-column-2.yaml new file mode 100644 index 0000000..dfbda32 --- /dev/null +++ b/chart/templates/collections.composition-tabpane-finops-panel-row-2-column-2.yaml @@ -0,0 +1,23 @@ +{{- if .Values.finops.enabled }} +apiVersion: v1 +data: + width: "16" +kind: ConfigMap +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-2 +--- +apiVersion: templates.krateo.io/v1alpha1 +kind: Collection +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-2 +spec: + propsRef: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-2 + namespace: {{ .Release.Namespace }} + type: column + widgetsRefs: + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-2-panel + namespace: {{ .Release.Namespace }} + resource: collections +{{- end }} \ No newline at end of file diff --git a/chart/templates/collections.composition-tabpane-finops-panel-row-2.yaml b/chart/templates/collections.composition-tabpane-finops-panel-row-2.yaml new file mode 100644 index 0000000..0de1317 --- /dev/null +++ b/chart/templates/collections.composition-tabpane-finops-panel-row-2.yaml @@ -0,0 +1,17 @@ +{{- if .Values.finops.enabled }} +apiVersion: templates.krateo.io/v1alpha1 +kind: Collection +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2 +spec: + type: row + widgetsRefs: + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-1 + namespace: {{ .Release.Namespace }} + resource: collections + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-2 + namespace: {{ .Release.Namespace }} + resource: collections +{{- end }} \ No newline at end of file diff --git a/chart/templates/collections.composition-tabpane-finops-panel.yaml b/chart/templates/collections.composition-tabpane-finops-panel.yaml new file mode 100644 index 0000000..3851739 --- /dev/null +++ b/chart/templates/collections.composition-tabpane-finops-panel.yaml @@ -0,0 +1,27 @@ +{{- if .Values.finops.enabled }} +apiVersion: v1 +data: + title: "FinOps - Costs and Usage" +kind: ConfigMap +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel +--- +apiVersion: templates.krateo.io/v1alpha1 +kind: Collection +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel +spec: + propsRef: + name: composition-{{ .Release.Name }}-tabpane-finops-panel + namespace: {{ .Release.Namespace }} + type: panel + widgetsRefs: + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1 + namespace: {{ .Release.Namespace }} + resource: collections + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2 + namespace: {{ .Release.Namespace }} + resource: collections +{{- end }} \ No newline at end of file diff --git a/chart/templates/collections.composition-tabpane-finops.yaml b/chart/templates/collections.composition-tabpane-finops.yaml new file mode 100644 index 0000000..f0bed48 --- /dev/null +++ b/chart/templates/collections.composition-tabpane-finops.yaml @@ -0,0 +1,23 @@ +{{- if .Values.finops.enabled }} +apiVersion: v1 +data: + label: FinOps +kind: ConfigMap +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops +--- +apiVersion: templates.krateo.io/v1alpha1 +kind: Collection +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops +spec: + propsRef: + name: composition-{{ .Release.Name }}-tabpane-finops + namespace: {{ .Release.Namespace }} + type: tabpane + widgetsRefs: + - apiVersion: templates.krateo.io/v1alpha1 + name: composition-{{ .Release.Name }}-tabpane-finops-panel + namespace: {{ .Release.Namespace }} + resource: collections +{{- end }} \ No newline at end of file diff --git a/chart/templates/widgets.composition-tabpane-finops-panel-row-1-column-1-panel-chartpie.yaml b/chart/templates/widgets.composition-tabpane-finops-panel-row-1-column-1-panel-chartpie.yaml new file mode 100644 index 0000000..080f6ce --- /dev/null +++ b/chart/templates/widgets.composition-tabpane-finops-panel-row-1-column-1-panel-chartpie.yaml @@ -0,0 +1,51 @@ +{{- if .Values.finops.enabled }} +apiVersion: templates.krateo.io/v1alpha1 +kind: Widget +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-1-panel-chartpie +spec: + type: chartpie + app: + template: + title: ${ .costs.status.title } + description: ${ .costs.status.description } + series: > + ${ "{ \"total\":\"" + (.costs.status.series[0].total | tostring) + + "\", \"data\": [" + + ( [ .costs.status.series[0].data[] | "{ \"color\": \"" + .color + "\", \"value\": \"" + (.value | tostring) + "\", \"label\": \"" + .label + "\"}" ] | join(",") ) + "]}" } + api: + - name: costs + path: "/call?apiVersion=templates.krateo.io%2Fv1&resource=restactions&name={{ .Release.Name }}-get-costs&namespace=azure-pricing-system" + verb: GET + endpointRef: + name: snowplow-endpoint + namespace: krateo-system + headers: + - 'Accept: application/json' +--- +apiVersion: templates.krateo.io/v1 +kind: RESTAction +metadata: + name: {{ .Release.Name }}-get-costs +spec: + api: + - name: getComposition + path: "/apis/composition.krateo.io/v0-1-1/namespaces/{{ .Release.Namespace }}/finopsexamplepricingvmazures/{{ .Release.Name }}" + verb: GET + headers: + - 'Accept: application/json' + - name: costs + dependsOn: + name: getComposition + endpointRef: + name: finops-database-handler-endpoint + namespace: krateo-system + path: "/compute/costs" + verb: POST + payload: | + ${ {table_name: "{{ .Values.global.tableName }}", resource_name: .getComposition.spec.name, resource_group_name: .getComposition.spec.resourceGroupName } } + headers: + - 'Accept: application/json' + - 'Content-Type: application/json' + filter: .costs +{{- end }} \ No newline at end of file diff --git a/chart/templates/widgets.composition-tabpane-finops-panel-row-1-column-2-panel-chartline.yaml b/chart/templates/widgets.composition-tabpane-finops-panel-row-1-column-2-panel-chartline.yaml new file mode 100644 index 0000000..b91b033 --- /dev/null +++ b/chart/templates/widgets.composition-tabpane-finops-panel-row-1-column-2-panel-chartline.yaml @@ -0,0 +1,50 @@ +{{- if .Values.finops.enabled }} +apiVersion: templates.krateo.io/v1alpha1 +kind: Widget +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-1-column-2-panel-chartline +spec: + type: chartline + app: + template: + xAxisName: ${ .metrics.status.xAxisName } + yAxisName: ${ .metrics.status.yAxisName } + legendName: ${ .metrics.status.legendName } + color: ${ .metrics.status.color } + data: ${ .metrics.status.data } + api: + - name: metrics + path: "/call?apiVersion=templates.krateo.io%2Fv1&resource=restactions&name=composition-{{ .Release.Name }}-get-metrics&namespace=azure-pricing-system" + verb: GET + endpointRef: + name: snowplow-endpoint + namespace: krateo-system + headers: + - 'Accept: application/json' +--- +apiVersion: templates.krateo.io/v1 +kind: RESTAction +metadata: + name: composition-{{ .Release.Name }}-get-metrics +spec: + api: + - name: getComposition + path: "/apis/composition.krateo.io/v0-1-1/namespaces/{{ .Release.Namespace }}/finopsexamplepricingvmazures/{{ .Release.Name }}" + verb: GET + headers: + - 'Accept: application/json' + - name: metrics + dependsOn: + name: getComposition + endpointRef: + name: finops-database-handler-endpoint + namespace: krateo-system + path: "/compute/metrics" + verb: POST + payload: | + ${ {table_name: "{{ .Values.global.tableName }}_res", resource_name: .getComposition.spec.name, resource_group_name: .getComposition.spec.resourceGroupName } } + headers: + - 'Accept: application/json' + - 'Content-Type: application/json' + filter: .metrics +{{- end }} \ No newline at end of file diff --git a/chart/templates/widgets.composition-tabpane-finops-panel-row-2-column-1-panel-paragraph.yaml b/chart/templates/widgets.composition-tabpane-finops-panel-row-2-column-1-panel-paragraph.yaml new file mode 100644 index 0000000..7ea2f38 --- /dev/null +++ b/chart/templates/widgets.composition-tabpane-finops-panel-row-2-column-1-panel-paragraph.yaml @@ -0,0 +1,11 @@ +{{- if .Values.finops.enabled }} +apiVersion: templates.krateo.io/v1alpha1 +kind: Widget +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-1-panel-paragraph +spec: + type: paragraph + app: + template: + text: "The overall costs for this composition, grouped by type of resource." +{{- end }} \ No newline at end of file diff --git a/chart/templates/widgets.composition-tabpane-finops-panel-row-2-column-2-panel-paragraph.yaml b/chart/templates/widgets.composition-tabpane-finops-panel-row-2-column-2-panel-paragraph.yaml new file mode 100644 index 0000000..0385d42 --- /dev/null +++ b/chart/templates/widgets.composition-tabpane-finops-panel-row-2-column-2-panel-paragraph.yaml @@ -0,0 +1,11 @@ +{{- if .Values.finops.enabled }} +apiVersion: templates.krateo.io/v1alpha1 +kind: Widget +metadata: + name: composition-{{ .Release.Name }}-tabpane-finops-panel-row-2-column-2-panel-paragraph +spec: + type: paragraph + app: + template: + text: "The total utilization for the requested resources." +{{- end }} \ No newline at end of file diff --git a/chart/values.yaml b/chart/values.yaml index a64afb8..3a7a37e 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -11,6 +11,8 @@ events: enabled: true yamlviewer: enabled: true +finops: + enabled: false global: compositionApiVersion: compositionApiVersion compositionId: compositionId