From 053d5a3320888c83666d212735d17944d82a34c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Floure?= Date: Fri, 5 Mar 2021 16:09:04 +0100 Subject: [PATCH] Fix mapping of lists in ONE Records, import both VM and VM_POOL subrecords --- lib/recycledcloud/opennebula/schema.ex | 3 +++ lib/recycledcloud/opennebula/schema/records.ex | 11 +++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/recycledcloud/opennebula/schema.ex b/lib/recycledcloud/opennebula/schema.ex index 6962077..278ae30 100644 --- a/lib/recycledcloud/opennebula/schema.ex +++ b/lib/recycledcloud/opennebula/schema.ex @@ -63,6 +63,9 @@ defmodule RecycledCloud.OpenNebula.Schema do data end + defp transform_value({k, l}) when is_list(l) do + {k, Enum.map(l, fn v -> map_record(v) end)} + end defp transform_value({k, v}), do: {k, map_record(v)} # Here be dragons! See moduledoc. diff --git a/lib/recycledcloud/opennebula/schema/records.ex b/lib/recycledcloud/opennebula/schema/records.ex index a891c25..96988ff 100644 --- a/lib/recycledcloud/opennebula/schema/records.ex +++ b/lib/recycledcloud/opennebula/schema/records.ex @@ -19,8 +19,15 @@ defmodule RecycledCloud.OpenNebula.Schema.Records do def get_model_for(object), do: Map.get(@models, object) - for {name, record} <- Record.extract_all(from: Schema.get_hrl_for("vm")) do + extract = fn name, acc -> Record.extract_all(from: Schema.get_hrl_for(name)) ++ acc end + sources = ["vm", "vm_pool"] + |> Enum.reduce([], extract) + |> Enum.sort_by(fn {name, _} -> name end) + |> Enum.dedup_by(fn {name, _} -> name end) + + #IO.inspect sources |> Enum.dedup_by(fn {, _} -> name end) + + for {name, record} <- sources do Record.defrecord name, record end - Record.defrecord :VM_POOL, Record.extract(:VM_POOL, from: Schema.get_hrl_for("vm_pool")) end