From f936da7a9a08054ff0e12718203ebccae9c9d758 Mon Sep 17 00:00:00 2001 From: maskarb Date: Wed, 6 Mar 2024 20:20:20 -0500 Subject: [PATCH 1/3] [COST-3607] add node arch to reporting_ocp_node table --- koku/masu/database/ocp_report_db_accessor.py | 4 +++- koku/reporting/migrations/0319_ocpnode_arch.py | 17 +++++++++++++++++ koku/reporting/provider/ocp/models.py | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 koku/reporting/migrations/0319_ocpnode_arch.py diff --git a/koku/masu/database/ocp_report_db_accessor.py b/koku/masu/database/ocp_report_db_accessor.py index 8191e52252..0b0edfe5cc 100644 --- a/koku/masu/database/ocp_report_db_accessor.py +++ b/koku/masu/database/ocp_report_db_accessor.py @@ -924,6 +924,7 @@ def populate_node_table(self, cluster, nodes): resource_id=node[1], node_capacity_cpu_cores=node[2], node_role=node[3], + arch=node[4], cluster=cluster, ) # if the node entry already exists but does not have a role assigned, update the node role @@ -953,7 +954,8 @@ def get_nodes_trino(self, source_uuid, start_date, end_date): WHEN contains(array_agg(DISTINCT ocp.namespace), 'openshift-kube-apiserver') THEN 'master' WHEN any_match(array_agg(DISTINCT nl.node_labels), element -> element like '%"node_role_kubernetes_io": "infra"%') THEN 'infra' ELSE 'worker' - END) as node_role + END) as node_role, + lower(json_extract_scalar(max(node_labels), '$.kubernetes_io_arch')) as arch FROM hive.{self.schema}.openshift_pod_usage_line_items_daily as ocp LEFT JOIN hive.{self.schema}.openshift_node_labels_line_items_daily as nl ON ocp.node = nl.node diff --git a/koku/reporting/migrations/0319_ocpnode_arch.py b/koku/reporting/migrations/0319_ocpnode_arch.py new file mode 100644 index 0000000000..cca3de5690 --- /dev/null +++ b/koku/reporting/migrations/0319_ocpnode_arch.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.10 on 2024-03-07 01:09 +from django.db import migrations +from django.db import models + + +class Migration(migrations.Migration): + dependencies = [ + ("reporting", "0318_ocpazurecomputesummaryp_subscription_name_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="ocpnode", + name="arch", + field=models.TextField(null=True), + ), + ] diff --git a/koku/reporting/provider/ocp/models.py b/koku/reporting/provider/ocp/models.py index 5396d6f451..c4fb7ca615 100644 --- a/koku/reporting/provider/ocp/models.py +++ b/koku/reporting/provider/ocp/models.py @@ -266,6 +266,7 @@ class Meta: node_capacity_cpu_cores = models.DecimalField(max_digits=18, decimal_places=2, null=True) cluster = models.ForeignKey("OCPCluster", on_delete=models.CASCADE) node_role = models.TextField(null=True) + arch = models.TextField(null=True) class OCPPVC(models.Model): From 0843b81bf82c7dcbd959fe2fdf911ac6904cdf06 Mon Sep 17 00:00:00 2001 From: maskarb Date: Wed, 6 Mar 2024 20:21:29 -0500 Subject: [PATCH 2/3] add architecture labels to ONPREM nodes --- dev/scripts/nise_ymls/ocp/ocp_on_premise.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dev/scripts/nise_ymls/ocp/ocp_on_premise.yml b/dev/scripts/nise_ymls/ocp/ocp_on_premise.yml index b57d28ec71..083ebe1c48 100644 --- a/dev/scripts/nise_ymls/ocp/ocp_on_premise.yml +++ b/dev/scripts/nise_ymls/ocp/ocp_on_premise.yml @@ -6,7 +6,7 @@ generators: nodes: - node: node_name: compute_1 - node_labels: label_instance-type:medium + node_labels: label_instance-type:medium|label_kubernetes_io_arch:amd64 cpu_cores: 4 memory_gig: 16 namespaces: @@ -56,7 +56,7 @@ generators: capacity_gig: 20 - node: node_name: compute_2 - node_labels: label_instance-type:small + node_labels: label_instance-type:small|label_kubernetes_io_arch:arm64 cpu_cores: 4 memory_gig: 16 namespaces: @@ -106,7 +106,7 @@ generators: capacity_gig: 20 - node: node_name: compute_3 - node_labels: label_nodeclass:compute|label_node_role_kubernetes_io:infra|label_instance-type:xsmall + node_labels: label_nodeclass:compute|label_node_role_kubernetes_io:infra|label_instance-type:xsmall|label_kubernetes_io_arch:s390x cpu_cores: 4 memory_gig: 16 namespaces: @@ -156,7 +156,7 @@ generators: capacity_gig: 20 - node: node_name: compute_4 - node_labels: label_instance-type:large + node_labels: label_instance-type:large|label_kubernetes_io_arch:amd64 cpu_cores: 4 memory_gig: 16 namespaces: @@ -206,7 +206,7 @@ generators: capacity_gig: 20 - node: node_name: compute_5 - node_labels: label_instance-type:xlarge + node_labels: label_instance-type:xlarge|label_kubernetes_io_arch:ppc64le cpu_cores: 4 memory_gig: 16 namespaces: @@ -256,7 +256,7 @@ generators: capacity_gig: 20 - node: node_name: compute_6 - node_labels: label_instance-type:xxlarge + node_labels: label_instance-type:xxlarge|label_kubernetes_io_arch:amd64 cpu_cores: 4 memory_gig: 16 namespaces: From fe61bc42ccbf61089e3d668718fe6cce2739f019 Mon Sep 17 00:00:00 2001 From: maskarb Date: Wed, 8 May 2024 09:51:00 -0400 Subject: [PATCH 3/3] update old entries --- koku/masu/database/ocp_report_db_accessor.py | 10 +++++++--- .../{0319_ocpnode_arch.py => 0320_ocpnode_arch.py} | 4 ++-- koku/reporting/provider/ocp/models.py | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) rename koku/reporting/migrations/{0319_ocpnode_arch.py => 0320_ocpnode_arch.py} (75%) diff --git a/koku/masu/database/ocp_report_db_accessor.py b/koku/masu/database/ocp_report_db_accessor.py index e643304d01..3c601be898 100644 --- a/koku/masu/database/ocp_report_db_accessor.py +++ b/koku/masu/database/ocp_report_db_accessor.py @@ -904,13 +904,17 @@ def populate_node_table(self, cluster, nodes): resource_id=node[1], node_capacity_cpu_cores=node[2], node_role=node[3], - arch=node[4], + architecture=node[4], cluster=cluster, ) # if the node entry already exists but does not have a role assigned, update the node role - elif not tmp_node.node_role: + if not tmp_node.node_role: tmp_node.node_role = node[3] - tmp_node.save() + tmp_node.save(update_fields=["node_role"]) + # if the node entry already exists but does not have an architecture, update the architecture + if not tmp_node.architecture: + tmp_node.architecture = node[4] + tmp_node.save(update_fields=["architecture"]) def populate_pvc_table(self, cluster, pvcs): """Get or create an entry in the OCP cluster table.""" diff --git a/koku/reporting/migrations/0319_ocpnode_arch.py b/koku/reporting/migrations/0320_ocpnode_arch.py similarity index 75% rename from koku/reporting/migrations/0319_ocpnode_arch.py rename to koku/reporting/migrations/0320_ocpnode_arch.py index cca3de5690..7b38f607e9 100644 --- a/koku/reporting/migrations/0319_ocpnode_arch.py +++ b/koku/reporting/migrations/0320_ocpnode_arch.py @@ -5,13 +5,13 @@ class Migration(migrations.Migration): dependencies = [ - ("reporting", "0318_ocpazurecomputesummaryp_subscription_name_and_more"), + ("reporting", "0319_node_network_costs"), ] operations = [ migrations.AddField( model_name="ocpnode", - name="arch", + name="architecture", field=models.TextField(null=True), ), ] diff --git a/koku/reporting/provider/ocp/models.py b/koku/reporting/provider/ocp/models.py index 543b343326..1765a05846 100644 --- a/koku/reporting/provider/ocp/models.py +++ b/koku/reporting/provider/ocp/models.py @@ -268,7 +268,7 @@ class Meta: node_capacity_cpu_cores = models.DecimalField(max_digits=18, decimal_places=2, null=True) cluster = models.ForeignKey("OCPCluster", on_delete=models.CASCADE) node_role = models.TextField(null=True) - arch = models.TextField(null=True) + architecture = models.TextField(null=True) class OCPNetworkSummaryP(models.Model):