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

Fixes #23968: Display a global view of group compliances #5298

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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,11 @@ trait RoNodeGroupRepository {
*/
def getAll(): IOResult[Seq[NodeGroup]]

/**
* Get all node groups by ids
*/
def getAllByIds(ids: Seq[NodeGroupId]): IOResult[Seq[NodeGroup]]

/**
* Get all the node group id and the set of ndoes within
* Goal is to be more efficient
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -429,6 +429,23 @@ class RoLDAPNodeGroupRepository(
}
}

def getAllByIds(ids: Seq[NodeGroupId]): IOResult[Seq[NodeGroup]] = {
for {
con <- ldap
// for each directive entry, map it. if one fails, all fails
entries <-
groupLibMutex.readLock(con.searchSub(rudderDit.GROUP.dn, OR(ids.map(id => EQ(A_NODE_GROUP_UUID, id.serialize)): _*)))
groups <- ZIO.foreach(entries)(groupEntry => {
mapper
.entry2NodeGroup(groupEntry)
.toIO
.chainError(s"Error when transforming LDAP entry into a Group instance. Entry: ${groupEntry}")
})
} yield {
groups
}
}

def getAllNodeIds(): IOResult[Map[NodeGroupId, Set[NodeId]]] = {
for {
con <- ldap
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2346,6 +2346,9 @@ class MockNodeGroups(nodesRepo: MockNodes) {
} yield cat
}
override def getAll(): IOResult[Seq[NodeGroup]] = categories.get.map(_.allGroups.values.map(_.nodeGroup).toSeq)
override def getAllByIds(ids: Seq[NodeGroupId]): IOResult[Seq[NodeGroup]] = {
categories.get.map(_.allGroups.values.map(_.nodeGroup).filter(g => ids.contains(g.id)).toSeq)
}

override def getAllNodeIds(): IOResult[Map[NodeGroupId, Set[NodeId]]] =
categories.get.map(_.allGroups.values.map(_.nodeGroup).map(g => (g.id, g.serverList)).toMap)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,14 @@ object ComplianceApi extends ApiModuleProvider[ComplianceApi] {
val dataContainer: Some[String] = Some("directivesCompliance")
}

final case object GetNodeGroupComplianceSummary
extends ComplianceApi with GeneralApi with ZeroParam with StartsAtVersion17 with SortIndex {
val z = implicitly[Line].value
val description = "Get a node group's compliance summary"
val (action, path) = GET / "compliance" / "summary" / "groups"
val dataContainer = Some("groupCompliance")
}

final case object GetNodeGroupComplianceId
extends ComplianceApi with GeneralApi with OneParam with StartsAtVersion17 with SortIndex {
val z: Int = implicitly[Line].value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@ object AuthorizationApiMapping {
ComplianceApi.GetGlobalCompliance.x :: ComplianceApi.GetRulesCompliance.x :: ComplianceApi.GetRulesComplianceId.x ::
ComplianceApi.GetNodesCompliance.x :: ComplianceApi.GetNodeComplianceId.x :: ChangesApi.GetRuleRepairedReports.x ::
ChangesApi.GetRecentChanges.x :: ComplianceApi.GetDirectiveComplianceId.x ::
ComplianceApi.GetDirectivesCompliance.x :: ComplianceApi.GetNodeGroupComplianceId.x :: ComplianceApi.GetNodeGroupComplianceTargetId.x :: Nil
ComplianceApi.GetDirectivesCompliance.x :: ComplianceApi.GetNodeGroupComplianceId.x :: ComplianceApi.GetNodeGroupComplianceTargetId.x ::
ComplianceApi.GetNodeGroupComplianceSummary.x :: Nil
case Compliance.Write => Nil
case Compliance.Edit => Nil

Expand Down