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