Skip to content

Commit

Permalink
Work in progress
Browse files Browse the repository at this point in the history
  • Loading branch information
fanf committed Sep 21, 2021
1 parent deed8c5 commit 7b8d112
Show file tree
Hide file tree
Showing 16 changed files with 1,094 additions and 246 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -220,9 +220,9 @@ isSystem: TRUE
directivePriority: 0
directiveVariable: OWNER[0]:${rudder.node.admin}
directiveVariable: UUID[0]:${rudder.node.id}
directiveVariable: POLICYSERVER[0]:%%POLICY_SERVER_HOSTNAME%%
directiveVariable: POLICYSERVER_ID[0]:root
directiveVariable: POLICYSERVER_ADMIN[0]:root
directiveVariable: POLICYSERVER[0]:${rudder.node.hostname}
directiveVariable: POLICYSERVER_ID[0]:${rudder.node.id}
directiveVariable: POLICYSERVER_ADMIN[0]:${rudder.node.admin}

#######################################################################################################################
## Allowed networks for root server: init corresponding setting in ou=Application Properties
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,9 @@

package com.normation.rudder.domain.logger

import org.slf4j.LoggerFactory
import com.normation.NamedZioLogger

import org.slf4j.LoggerFactory
import com.normation.rudder.domain.Constants.XML_CURRENT_FILE_FORMAT
import com.normation.rudder.migration.MigrableEntity

Expand Down Expand Up @@ -66,3 +67,7 @@ final case class MigrationLogger(
_logger.debug(s"Successfully migrated ${seq.size} eventlogs to format ${goal}")
}
}

object MigrationLoggerPure extends NamedZioLogger {
def loggerName = "migration"
}
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ trait NodeInfoService {


/**
* Return the number of managed (ie non policy server, no rudder role )nodes.
* Return the number of managed (ie non policy server, no rudder role nodes.
* Implementation of that method must as efficient as possible.
* It can't fails (implementation must use a sane default if backend is not accessible,
* or cache the information)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,11 @@ package com.normation.rudder.services.servers

import com.normation.inventory.domain.NodeId
import com.normation.rudder.domain.Constants

import net.liftweb.common.Loggable
import com.normation.eventlog.EventActor
import com.normation.eventlog.ModificationId

import ca.mrvisser.sealerate
import cats.data.NonEmptyList
import com.normation.cfclerk.domain.TechniqueName
Expand All @@ -50,13 +52,16 @@ import com.normation.ldap.sdk.LDAPConnectionProvider
import com.normation.ldap.sdk.RwLDAPConnection
import com.normation.rudder.domain.RudderDit
import com.normation.rudder.domain.logger.ApplicationLogger

import com.unboundid.ldap.sdk.DN
import net.liftweb.common.Failure
import net.liftweb.common.Full

import zio._
import zio.syntax._
import com.normation.errors._
import com.normation.eventlog.EventLogDetails
import com.normation.ldap.sdk.LDAPEntry
import com.normation.rudder.domain.RudderLDAPConstants
import com.normation.rudder.domain.appconfig.RudderWebPropertyName
import com.normation.rudder.domain.eventlog.AuthorizedNetworkModification
Expand Down Expand Up @@ -84,9 +89,11 @@ import com.normation.rudder.domain.queries.Query
import com.normation.rudder.domain.queries.StringComparator
import com.normation.rudder.repository.EventLogRepository
import com.normation.rudder.rule.category.RuleCategoryId

import com.normation.zio._
import zio.json._
import com.normation.rudder.services.servers.json._

import com.softwaremill.quicklens._
import net.liftweb.common.Box

Expand Down Expand Up @@ -316,16 +323,31 @@ class PolicyServerManagementServiceImpl(
*/
val lock = Semaphore.make(1).runNow



private def getDefaultSettingEntryIfMissing = {
val entry = dit.APPCONFIG.propertyModel(RudderWebPropertyName(PROP_NAME))
entry.resetValuesTo(RudderLDAPConstants.A_PROPERTY_VALUE, """[{"id":"root","allowed-networks":[]}]""")
entry
}

private def getLdap(con: RwLDAPConnection) = {
for {
entry <- con.get(dit.APPCONFIG.propertyDN(RudderWebPropertyName(PROP_NAME))).notOptional(s"LDAP setting entry ${PROP_NAME} was not found. It may be a bug, please report it.")
entry <- con.get(dit.APPCONFIG.propertyDN(RudderWebPropertyName(PROP_NAME))).map {
case Some(e) => e
case None => getDefaultSettingEntryIfMissing
}
json <- entry(RudderLDAPConstants.A_PROPERTY_VALUE).notOptional(s"Value for policy servers is empty, while we should always have root server defined. It may be a bug, please report it.")
servers <- json.fromJson[JPolicyServers].toIO
} yield {
(entry, servers.toPolicyServers())
}
}

/*
* Get policy servers. If the setting property is missing (for example in migration), returns just root with
* no allowed networks.
*/
override def getPolicyServers(): IOResult[PolicyServers] = {
for {
con <- ldap
Expand Down Expand Up @@ -490,17 +512,17 @@ object PolicyServerConfigurationObjects {
}

val relayTechniques = List("server-common", "rudder-service-apache","rudder-service-relayd")
val rootTechniques = List("rudder-service-postgresql","rudder-service-slapd","rudder-service-webapp")
val rootTechniques = List("rudder-service-postgresql","rudder-service-slapd","rudder-service-webapp") ::: relayTechniques

def directiveCommonHasPolicyServer(nodeId: NodeId, hostname: String, policyServerId: NodeId) = {
def directiveCommonHasPolicyServer(nodeId: NodeId) = {
TechniqueName("common") ->
s"common-hasPolicyServer-${nodeId.value}".toDirective
.modify(_.parameters).setTo(Map(
"OWNER" -> Seq("${rudder.node.admin}")
, "UUID" -> Seq("${rudder.node.id}")
, "POLICYSERVER" -> Seq(hostname)
, "POLICYSERVER_ID" -> Seq(policyServerId.value)
, "POLICYSERVER_ADMIN" -> Seq("root")
, "POLICYSERVER" -> Seq("${rudder.node.hostname}")
, "POLICYSERVER_ID" -> Seq("${rudder.node.id}")
, "POLICYSERVER_ADMIN" -> Seq("${rudder.node.admin}")
))
.modify(_.name).setTo(s"Common - ${nodeId.value}")
.modify(_.shortDescription).setTo(s"Common policy for nodes with '${nodeId.value}' for policy server")
Expand Down Expand Up @@ -575,18 +597,17 @@ object PolicyServerConfigurationObjects {
}

/*
* Get system configuration objects (directives, groups, rules) for policyServerId with given hostname.
* parentPolicyServerId is the policyServer'policyServer (and for root, it's itself)
* Get system configuration objects (directives, groups, rules) for policyServerId
*/
def getConfigurationObject(policyServerId: NodeId, hostname: String, parentPolicyServerId: NodeId): PolicyServerConfigurationObjects = {
def getConfigurationObject(policyServerId: NodeId): PolicyServerConfigurationObjects = {
val techniques = if(policyServerId == Constants.ROOT_POLICY_SERVER_ID) {
rootTechniques
} else {
relayTechniques
}

PolicyServerConfigurationObjects(
Map(directiveServerCommon(policyServerId), directiveCommonHasPolicyServer(policyServerId, hostname, parentPolicyServerId))
Map(directiveServerCommon(policyServerId), directiveCommonHasPolicyServer(policyServerId))
++ directiveServices(policyServerId).filter { case (t, d) => techniques.contains(t.value) }
, groupHasPolicyServer(policyServerId) :: Nil
, PolicyServerTarget(policyServerId) :: Nil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,20 +53,6 @@ import com.normation.ldap.sdk.RwLDAPConnection
@RunWith(classOf[JUnitRunner])
class LoadDemoDataTest extends Specification {

val schemaLDIFs = (
"00-core" ::
"01-pwpolicy" ::
"04-rfc2307bis" ::
"05-rfc4876" ::
"099-0-inventory" ::
"099-1-rudder" ::
Nil
) map { name =>
// toURI is needed for https://issues.rudder.io/issues/19186
this.getClass.getClassLoader.getResource("ldap-data/schema/" + name + ".ldif").toURI.getPath
}

val baseDN = "cn=rudder-configuration"
val bootstrapLDIFs = ("ldap/bootstrap.ldif" :: "ldap-data/inventory-sample-data.ldif" :: Nil) map { name =>
// toURI is needed for https://issues.rudder.io/issues/19186
this.getClass.getClassLoader.getResource(name).toURI.getPath
Expand All @@ -80,12 +66,7 @@ class LoadDemoDataTest extends Specification {
i + x
}

val ldap = InMemoryDsConnectionProvider[RwLDAPConnection with RoLDAPConnection](
baseDNs = baseDN :: Nil
, schemaLDIFPaths = schemaLDIFs
, bootstrapLDIFPaths = bootstrapLDIFs
)

val ldap = InitTestLDAPServer.newLdapConnectionProvider(bootstrapLDIFs)

"The in memory LDAP directory" should {

Expand All @@ -95,3 +76,28 @@ class LoadDemoDataTest extends Specification {
}
}
}

object InitTestLDAPServer {
val schemaLDIFs = (
"00-core" ::
"01-pwpolicy" ::
"04-rfc2307bis" ::
"05-rfc4876" ::
"099-0-inventory" ::
"099-1-rudder" ::
Nil
) map { name =>
// toURI is needed for https://issues.rudder.io/issues/19186
this.getClass.getClassLoader.getResource("ldap-data/schema/" + name + ".ldif").toURI.getPath
}

val baseDN = "cn=rudder-configuration"

def newLdapConnectionProvider(fullLdifPaths: List[String]) = {
InMemoryDsConnectionProvider[RwLDAPConnection with RoLDAPConnection](
baseDNs = baseDN :: Nil
, schemaLDIFPaths = schemaLDIFs
, bootstrapLDIFPaths = fullLdifPaths
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -746,9 +746,9 @@ class TestNodeConfiguration(prefixTestResources: String = "") {
, Map(
("OWNER", Seq("${rudder.node.admin}"))
, ("UUID", Seq("${rudder.node.id}"))
, ("POLICYSERVER_ID", Seq("${rudder.node.policyserver.id}"))
, ("POLICYSERVER", Seq("${rudder.node.policyserver.hostname}"))
, ("POLICYSERVER_ADMIN", Seq("${rudder.node.policyserver.admin}"))
, ("POLICYSERVER_ID", Seq("${rudder.node.id}"))
, ("POLICYSERVER", Seq("${rudder.node.hostname}"))
, ("POLICYSERVER_ADMIN", Seq("${rudder.node.admin}"))
)
, "common-root"
, "", None, "", 5, true, true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -308,9 +308,9 @@ class MockDirectives(mockTechniques: MockTechniques) {
, Map(
("OWNER", Seq("${rudder.node.admin}"))
, ("UUID", Seq("${rudder.node.id}"))
, ("POLICYSERVER_ID", Seq("${rudder.node.policyserver.id}"))
, ("POLICYSERVER", Seq("${rudder.node.policyserver.hostname}"))
, ("POLICYSERVER_ADMIN", Seq("${rudder.node.policyserver.admin}"))
, ("POLICYSERVER_ID", Seq("${rudder.node.id}"))
, ("POLICYSERVER", Seq("${rudder.node.hostname}"))
, ("POLICYSERVER_ADMIN", Seq("${rudder.node.admin}"))
)
, "common-root"
, "", None, "", 5, true, true // short desc / policyMode / long desc / prio / enabled / system
Expand Down
8 changes: 8 additions & 0 deletions webapp/sources/rudder/rudder-web/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -276,5 +276,13 @@ along with Rudder. If not, see <http://www.gnu.org/licenses/>.
<version>${spring-security-version}</version>
</dependency>

<!-- TESTS -->
<dependency>
<groupId>com.normation.rudder</groupId>
<artifactId>rudder-core</artifactId>
<version>${rudder-version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -2294,7 +2294,6 @@ object RudderConfig extends Loggable {
// Check technique library reload needs to be achieved after modification in configuration (like migration of CFEngine variables)
, new CheckTechniqueLibraryReload(
techniqueRepositoryImpl
, asyncDeploymentAgent
, uuidGen
)
, new CheckNcfTechniqueUpdate(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ package bootstrap.liftweb.checks.action

import com.normation.cfclerk.services.UpdateTechniqueLibrary
import com.normation.eventlog.ModificationId
import com.normation.rudder.batch.AsyncDeploymentActor
import com.normation.rudder.domain.eventlog.RudderEventActor
import com.normation.utils.StringUuidGenerator

Expand All @@ -55,9 +54,8 @@ import java.io.File
* This needs to be achieved after all tasks that could modify configuration are done
*/
class CheckTechniqueLibraryReload(
techniqueLibUpdater : UpdateTechniqueLibrary
, asyncDeploymentAgent : AsyncDeploymentActor
, uuidGen : StringUuidGenerator
techniqueLibUpdater: UpdateTechniqueLibrary
, uuidGen : StringUuidGenerator
) extends BootstrapChecks {

override val description = "Check for force reload of Techniques library"
Expand Down
Loading

0 comments on commit 7b8d112

Please sign in to comment.