diff --git a/lib/trento/discovery/payloads/cluster/cib_discovery_payload.ex b/lib/trento/discovery/payloads/cluster/cib_discovery_payload.ex index c1bde6fdc0..83168879b4 100644 --- a/lib/trento/discovery/payloads/cluster/cib_discovery_payload.ex +++ b/lib/trento/discovery/payloads/cluster/cib_discovery_payload.ex @@ -9,7 +9,7 @@ defmodule Trento.Discovery.Payloads.Cluster.CibDiscoveryPayload do Primitive field payload """ - @required_fields [:id, :type, :class, :operations, :instance_attributes] + @required_fields [:id, :type, :class] use Trento.Support.Type deftype do @@ -56,13 +56,13 @@ defmodule Trento.Discovery.Payloads.Cluster.CibDiscoveryPayload do defp operations_changeset(operations, attrs) do operations |> cast(attrs, [:id, :name, :role, :timeout, :interval]) - |> validate_required_fields([:id, :name, :role]) + |> validate_required([:id, :name]) end defp instance_attributes_changeset(instance_attributes, attrs) do instance_attributes |> cast(attrs, [:id, :name, :value]) - |> validate_required_fields([:id, :name, :value]) + |> validate_required([:id, :name]) end end @@ -71,7 +71,7 @@ defmodule Trento.Discovery.Payloads.Cluster.CibDiscoveryPayload do Resources field payload """ - @required_fields [:primitives, :clones, :groups] + @required_fields [] use Trento.Support.Type deftype do @@ -105,14 +105,14 @@ defmodule Trento.Discovery.Payloads.Cluster.CibDiscoveryPayload do clones |> cast(attrs, [:id]) |> cast_embed(:primitive) - |> validate_required_fields([:id]) + |> validate_required([:id]) end defp groups_changeset(groups, attrs) do groups |> cast(attrs, [:id]) |> cast_embed(:primitives) - |> validate_required_fields([:id]) + |> validate_required([:id]) end defp transform_nil_lists( @@ -127,7 +127,7 @@ defmodule Trento.Discovery.Payloads.Cluster.CibDiscoveryPayload do defp transform_nil_lists(attrs), do: attrs end - @required_fields [:configuration] + @required_fields [] use Trento.Support.Type @@ -148,28 +148,26 @@ defmodule Trento.Discovery.Payloads.Cluster.CibDiscoveryPayload do def changeset(cib, attrs) do cib |> cast(attrs, []) - |> cast_embed(:configuration, with: &configuration_changeset/2) + |> cast_embed(:configuration, with: &configuration_changeset/2, required: true) |> validate_required_fields(@required_fields) end def configuration_changeset(configuration, attrs) do configuration |> cast(attrs, []) - |> cast_embed(:resources) - |> cast_embed(:crm_config, with: &crm_config_changeset/2) - |> validate_required_fields([:resources]) + |> cast_embed(:resources, required: true) + |> cast_embed(:crm_config, with: &crm_config_changeset/2, required: true) end def crm_config_changeset(crm_config, attrs) do crm_config |> cast(attrs, []) - |> cast_embed(:cluster_properties, with: &cluster_properties_changeset/2) - |> validate_required_fields([:cluster_properties]) + |> cast_embed(:cluster_properties, with: &cluster_properties_changeset/2, required: true) end def cluster_properties_changeset(cluster_properties, attrs) do cluster_properties |> cast(attrs, [:id, :name, :value]) - |> validate_required_fields([:id, :name, :value]) + |> validate_required([:id, :name]) end end diff --git a/lib/trento/discovery/payloads/cluster/cluster_discovery_payload.ex b/lib/trento/discovery/payloads/cluster/cluster_discovery_payload.ex index b674388c0f..4fbd267804 100644 --- a/lib/trento/discovery/payloads/cluster/cluster_discovery_payload.ex +++ b/lib/trento/discovery/payloads/cluster/cluster_discovery_payload.ex @@ -3,7 +3,7 @@ defmodule Trento.Discovery.Payloads.Cluster.ClusterDiscoveryPayload do Cluster discovery integration event payload """ - @required_fields [:dc, :provider, :id, :cluster_type, :cib, :sbd, :crmmon] + @required_fields [:dc, :provider, :id, :cluster_type] @required_fields_hana [:sid] @required_fields_ascs_ers [:additional_sids] @@ -44,9 +44,9 @@ defmodule Trento.Discovery.Payloads.Cluster.ClusterDiscoveryPayload do cluster |> cast(enriched_attributes, fields()) - |> cast_embed(:cib) + |> cast_embed(:cib, required: true) |> cast_embed(:sbd) - |> cast_embed(:crmmon) + |> cast_embed(:crmmon, required: true) |> validate_required_fields(@required_fields) |> maybe_validate_required_fields(enriched_attributes) end diff --git a/lib/trento/discovery/payloads/cluster/crmmon_discovery_payload.ex b/lib/trento/discovery/payloads/cluster/crmmon_discovery_payload.ex index ed8fee7aab..6a9fb52407 100644 --- a/lib/trento/discovery/payloads/cluster/crmmon_discovery_payload.ex +++ b/lib/trento/discovery/payloads/cluster/crmmon_discovery_payload.ex @@ -9,7 +9,7 @@ defmodule Trento.Discovery.Payloads.Cluster.CrmmonDiscoveryPayload do NodeHistory field payload """ - @required_fields [:nodes] + @required_fields [] use Trento.Support.Type deftype do @@ -27,7 +27,7 @@ defmodule Trento.Discovery.Payloads.Cluster.CrmmonDiscoveryPayload do def changeset(node_history, attrs) do node_history |> cast(attrs, []) - |> cast_embed(:nodes, with: &nodes_changeset/2) + |> cast_embed(:nodes, with: &nodes_changeset/2, required: true) |> validate_required_fields(@required_fields) end @@ -35,13 +35,13 @@ defmodule Trento.Discovery.Payloads.Cluster.CrmmonDiscoveryPayload do nodes |> cast(attrs, [:name]) |> cast_embed(:resource_history, with: &resource_history_changeset/2) - |> validate_required_fields([:name, :resource_history]) + |> validate_required([:name]) end def resource_history_changeset(resource_history, attrs) do resource_history |> cast(attrs, [:name, :fail_count, :migration_threshold]) - |> validate_required_fields([:name, :fail_count, :migration_threshold]) + |> validate_required([:name, :fail_count]) end end @@ -57,11 +57,9 @@ defmodule Trento.Discovery.Payloads.Cluster.CrmmonDiscoveryPayload do :active, :failed, :blocked, - :managed, :orphaned, :failure_ignored, - :nodes_running_on, - :node + :nodes_running_on ] use Trento.Support.Type @@ -94,7 +92,7 @@ defmodule Trento.Discovery.Payloads.Cluster.CrmmonDiscoveryPayload do defp resource_node_changeset(resource_node, attrs) do resource_node |> cast(attrs, [:id, :name, :cached]) - |> validate_required_fields([]) + |> validate_required([:id, :name]) end end @@ -103,7 +101,7 @@ defmodule Trento.Discovery.Payloads.Cluster.CrmmonDiscoveryPayload do Summary field payload """ - @required_fields [:nodes, :resources, :last_change] + @required_fields [] use Trento.Support.Type deftype do @@ -125,39 +123,33 @@ defmodule Trento.Discovery.Payloads.Cluster.CrmmonDiscoveryPayload do def changeset(summary, attrs) do summary |> cast(attrs, []) - |> cast_embed(:nodes, with: &nodes_changeset/2) - |> cast_embed(:resources, with: &resources_changeset/2) - |> cast_embed(:last_change, with: &last_change_changeset/2) + |> cast_embed(:nodes, with: &nodes_changeset/2, required: true) + |> cast_embed(:resources, with: &resources_changeset/2, required: true) + |> cast_embed(:last_change, with: &last_change_changeset/2, required: true) |> validate_required_fields(@required_fields) end def nodes_changeset(nodes, attrs) do nodes |> cast(attrs, [:number]) - |> validate_required_fields([:number]) + |> validate_required([:number]) end def resources_changeset(resources, attrs) do resources |> cast(attrs, [:number, :blocked, :disabled]) - |> validate_required_fields([:number, :blocked, :disabled]) + |> validate_required([:number]) end def last_change_changeset(last_change, attrs) do last_change |> cast(attrs, [:time]) - |> validate_required_fields([:time]) + |> validate_required([:time]) end end - @required_fields [ - :version, - :summary, - :resources, - :clones, - :node_history, - :node_attributes - ] + @required_fields [:version] + use Trento.Support.Type deftype do @@ -211,13 +203,13 @@ defmodule Trento.Discovery.Payloads.Cluster.CrmmonDiscoveryPayload do crmmon |> cast(transformed_attrs, [:version]) - |> cast_embed(:summary) - |> cast_embed(:nodes, with: &nodes_changeset/2) + |> cast_embed(:summary, required: true) + |> cast_embed(:nodes, with: &nodes_changeset/2, required: true) |> cast_embed(:resources) |> cast_embed(:groups, with: &groups_changeset/2) |> cast_embed(:clones, with: &clones_changeset/2) - |> cast_embed(:node_history) - |> cast_embed(:node_attributes, with: &node_attributes_changeset/2) + |> cast_embed(:node_history, required: true) + |> cast_embed(:node_attributes, with: &node_attributes_changeset/2, required: true) |> validate_required_fields(@required_fields) end @@ -232,21 +224,18 @@ defmodule Trento.Discovery.Payloads.Cluster.CrmmonDiscoveryPayload do |> cast(attrs, [:id]) |> cast_embed(:resources) |> cast_embed(:primitives) - |> validate_required_fields([:id, :resources, :primitives]) + |> validate_required([:id]) end defp clones_changeset(clones, attrs) do clones |> cast(attrs, [:id, :failed, :unique, :managed, :multi_state, :failure_ignored]) |> cast_embed(:resources) - |> validate_required_fields([ + |> validate_required([ :id, :failed, :unique, - :managed, - :multi_state, - :failure_ignored, - :resources + :failure_ignored ]) end @@ -254,20 +243,19 @@ defmodule Trento.Discovery.Payloads.Cluster.CrmmonDiscoveryPayload do node_attributes |> cast(attrs, []) |> cast_embed(:nodes, with: &node_attributes_nodes_changeset/2) - |> validate_required_fields([:nodes]) end defp node_attributes_nodes_changeset(nodes, attrs) do nodes |> cast(attrs, [:name]) |> cast_embed(:attributes, with: &attributes_changeset/2) - |> validate_required_fields([:name, :attributes]) + |> validate_required([:name]) end defp attributes_changeset(attributes, attrs) do attributes |> cast(attrs, [:name, :value]) - |> validate_required_fields([:name, :value]) + |> validate_required([:name, :value]) end defp transform_nil_lists( diff --git a/lib/trento/discovery/payloads/cluster/sbd_discovery_payload.ex b/lib/trento/discovery/payloads/cluster/sbd_discovery_payload.ex index 78095fa3b0..a618684ff4 100644 --- a/lib/trento/discovery/payloads/cluster/sbd_discovery_payload.ex +++ b/lib/trento/discovery/payloads/cluster/sbd_discovery_payload.ex @@ -28,7 +28,7 @@ defmodule Trento.Discovery.Payloads.Cluster.SbdDiscoveryPayload do defp devices_changeset(devices, attrs) do devices |> cast(attrs, [:device, :status]) - |> validate_required_fields([:device, :status]) + |> validate_required([:device, :status]) end defp transform_nil_lists(%{"devices" => devices} = attrs) do diff --git a/lib/trento/discovery/payloads/sap_system_discovery_payload.ex b/lib/trento/discovery/payloads/sap_system_discovery_payload.ex index 64d135ea3c..12ee66caba 100644 --- a/lib/trento/discovery/payloads/sap_system_discovery_payload.ex +++ b/lib/trento/discovery/payloads/sap_system_discovery_payload.ex @@ -36,10 +36,11 @@ defmodule Trento.Discovery.Payloads.SapSystemDiscoveryPayload do sap_system |> cast(modified_attrs, fields()) |> cast_embed(:Profile, - with: fn profile, attrs -> Profile.changeset(profile, attrs, parse_system_type(attrs)) end + with: fn profile, attrs -> Profile.changeset(profile, attrs, parse_system_type(attrs)) end, + required: true ) |> cast_embed(:Databases) - |> cast_embed(:Instances) + |> cast_embed(:Instances, required: true) |> validate_required_fields(@required_fields) |> validate_inclusion(:Type, @system_types) end @@ -122,7 +123,7 @@ defmodule Trento.Discovery.Payloads.SapSystemDiscoveryPayload do SystemReplication } - @required_fields [:Host, :Name, :Type, :SAPControl, :SystemReplication] + @required_fields [:Host, :Name, :Type] use Trento.Support.Type @@ -138,7 +139,7 @@ defmodule Trento.Discovery.Payloads.SapSystemDiscoveryPayload do def changeset(instance, attrs) do instance |> cast(attrs, fields()) - |> cast_embed(:SAPControl) + |> cast_embed(:SAPControl, required: true) |> cast_embed(:SystemReplication) |> validate_required_fields(@required_fields) end @@ -155,7 +156,7 @@ defmodule Trento.Discovery.Payloads.SapSystemDiscoveryPayload do SapControlProperty } - @required_fields [:Properties, :Instances, :Processes] + @required_fields [] use Trento.Support.Type @@ -176,13 +177,14 @@ defmodule Trento.Discovery.Payloads.SapSystemDiscoveryPayload do sap_control |> cast(attrs, fields()) - |> cast_embed(:Properties) + |> cast_embed(:Properties, required: true) |> cast_embed(:Instances, with: fn instances, attrs -> SapControlInstance.changeset(instances, attrs, hostname, instance_number) - end + end, + required: true ) - |> cast_embed(:Processes) + |> cast_embed(:Processes, required: true) |> validate_required_fields(@required_fields) end diff --git a/lib/trento/discovery/policies/cluster_policy.ex b/lib/trento/discovery/policies/cluster_policy.ex index 8aa26694a5..6b1f9ba373 100644 --- a/lib/trento/discovery/policies/cluster_policy.ex +++ b/lib/trento/discovery/policies/cluster_policy.ex @@ -278,6 +278,8 @@ defmodule Trento.Discovery.Policies.ClusterPolicy do end) end + defp parse_sbd_devices(_), do: [] + defp parse_node_resources(node_name, crmmon) do crmmon |> extract_cluster_resources() diff --git a/test/support/factory.ex b/test/support/factory.ex index 7004d6be03..6e3c77e1f1 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -653,11 +653,7 @@ defmodule Trento.Factory do def crm_resource_factory do %{ "Id" => Faker.UUID.v4(), - "Node" => %{ - "Id" => "1", - "Name" => Faker.StarWars.planet(), - "Cached" => true - }, + "Node" => build(:crm_resource_node), "Role" => "Started", "Agent" => Faker.Pokemon.name(), "Active" => true, @@ -670,6 +666,14 @@ defmodule Trento.Factory do } end + def crm_resource_node_factory do + %{ + "Id" => "1", + "Name" => Faker.StarWars.planet(), + "Cached" => true + } + end + def host_tombstoned_event_factory do HostTombstoned.new!(%{ host_id: Faker.UUID.v4() diff --git a/test/trento/discovery/policies/cluster_policy_test.exs b/test/trento/discovery/policies/cluster_policy_test.exs index 0440770339..f2d2ebd5a4 100644 --- a/test/trento/discovery/policies/cluster_policy_test.exs +++ b/test/trento/discovery/policies/cluster_policy_test.exs @@ -702,7 +702,7 @@ defmodule Trento.Discovery.Policies.ClusterPolicyTest do "Id" => "rsc_sap_NWP_ASCS00", "Agent" => "ocf::heartbeat:SAPInstance", "Role" => "Started", - "Node" => %{"Name" => "vmnwpd01"} + "Node" => build(:crm_resource_node, %{"Name" => "vmnwpd01"}) }) group_2_resources = @@ -710,7 +710,7 @@ defmodule Trento.Discovery.Policies.ClusterPolicyTest do "Id" => "rsc_sap_NWP_ERS10", "Agent" => "ocf::heartbeat:SAPInstance", "Role" => "Stopped", - "Node" => %{"Name" => "vmnwpd02"} + "Node" => build(:crm_resource_node, %{"Name" => "vmnwpd02"}) }) assert {:ok, @@ -730,8 +730,8 @@ defmodule Trento.Discovery.Policies.ClusterPolicyTest do "ha_cluster_discovery_ascs_ers" |> load_discovery_event_fixture() |> put_in(["payload", "Crmmon", "Groups"], [ - %{"Resources" => group_1_resources}, - %{"Resources" => group_2_resources} + %{"Id" => UUID.uuid4(), "Resources" => group_1_resources}, + %{"Id" => UUID.uuid4(), "Resources" => group_2_resources} ]) |> ClusterPolicy.handle(nil) end @@ -741,14 +741,14 @@ defmodule Trento.Discovery.Policies.ClusterPolicyTest do build_list(1, :crm_resource, %{ "Id" => "rsc_sap_NWP_ASCS00", "Agent" => "ocf::heartbeat:SAPInstance", - "Node" => %{"Name" => "vmnwpd01"} + "Node" => build(:crm_resource_node, %{"Name" => "vmnwpd01"}) }) group_2_resources = build_list(1, :crm_resource, %{ "Id" => "rsc_sap_NWP_ERS10", "Agent" => "ocf::heartbeat:SAPInstance", - "Node" => %{"Name" => "vmnwpd01"} + "Node" => build(:crm_resource_node, %{"Name" => "vmnwpd01"}) }) assert {:ok, @@ -768,8 +768,8 @@ defmodule Trento.Discovery.Policies.ClusterPolicyTest do "ha_cluster_discovery_ascs_ers" |> load_discovery_event_fixture() |> put_in(["payload", "Crmmon", "Groups"], [ - %{"Resources" => group_1_resources}, - %{"Resources" => group_2_resources} + %{"Id" => UUID.uuid4(), "Resources" => group_1_resources}, + %{"Id" => UUID.uuid4(), "Resources" => group_2_resources} ]) |> ClusterPolicy.handle(nil) end @@ -780,7 +780,7 @@ defmodule Trento.Discovery.Policies.ClusterPolicyTest do "Id" => "rsc_sap_NWP_ASCS00", "Agent" => "ocf::heartbeat:SAPInstance", "Failed" => true, - "Node" => %{"Name" => "vmnwpd01"} + "Node" => build(:crm_resource_node, %{"Name" => "vmnwpd01"}) }) group_2_resources = @@ -788,7 +788,7 @@ defmodule Trento.Discovery.Policies.ClusterPolicyTest do "Id" => "rsc_sap_NWP_ERS10", "Agent" => "ocf::heartbeat:SAPInstance", "Failed" => false, - "Node" => %{"Name" => "vmnwpd01"} + "Node" => build(:crm_resource_node, %{"Name" => "vmnwpd01"}) }) assert {:ok, @@ -808,8 +808,8 @@ defmodule Trento.Discovery.Policies.ClusterPolicyTest do "ha_cluster_discovery_ascs_ers" |> load_discovery_event_fixture() |> put_in(["payload", "Crmmon", "Groups"], [ - %{"Resources" => group_1_resources}, - %{"Resources" => group_2_resources} + %{"Id" => UUID.uuid4(), "Resources" => group_1_resources}, + %{"Id" => UUID.uuid4(), "Resources" => group_2_resources} ]) |> ClusterPolicy.handle(nil) end