Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix required fields usage #2214

Merged
merged 6 commits into from
Jan 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 12 additions & 14 deletions lib/trento/discovery/payloads/cluster/cib_discovery_payload.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand All @@ -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
Expand Down Expand Up @@ -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(
Expand All @@ -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

Expand All @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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]

Expand Down Expand Up @@ -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
Expand Down
60 changes: 24 additions & 36 deletions lib/trento/discovery/payloads/cluster/crmmon_discovery_payload.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -27,21 +27,21 @@ 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

def nodes_changeset(nodes, attrs) 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

Expand All @@ -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

Expand Down Expand Up @@ -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

Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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

Expand All @@ -232,42 +224,38 @@ 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

defp node_attributes_changeset(node_attributes, attrs) 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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
18 changes: 10 additions & 8 deletions lib/trento/discovery/payloads/sap_system_discovery_payload.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand All @@ -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
Expand All @@ -155,7 +156,7 @@ defmodule Trento.Discovery.Payloads.SapSystemDiscoveryPayload do
SapControlProperty
}

@required_fields [:Properties, :Instances, :Processes]
@required_fields []

use Trento.Support.Type

Expand All @@ -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

Expand Down
2 changes: 2 additions & 0 deletions lib/trento/discovery/policies/cluster_policy.ex
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,8 @@ defmodule Trento.Discovery.Policies.ClusterPolicy do
end)
end

defp parse_sbd_devices(_), do: []
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Enable empty sbd data coming, for future non sbd scenario.
PD: without this, we were having a nasty error


defp parse_node_resources(node_name, crmmon) do
crmmon
|> extract_cluster_resources()
Expand Down
14 changes: 9 additions & 5 deletions test/support/factory.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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()
Expand Down
Loading