ILM GALSync with hub-and-spoke architecture

In case you wish to implement a hub-and-spoke infrastructure for your Global Address List Sync with ILM/FIM, you need to tune the original setup.
Hub-and-spoke means one master GAL domain which communicates with slave domains, without direct provisioning between slave domains.
For ease of use, I’ve put the logic in one function.
In the GALMV.vb file you need to create a private function:
        Private Function shouldprovision( _
        ByVal currentMVentry As MVEntry, _
        ByVal mANAme As String) As Boolean
            Const masterDomain As String = "g1.local" ‘like msOriginatingForest format
            Const masterMAName As String = "GALSYNC1" ‘MA NAME
            Dim IsHub As Boolean = currentMVentry(EXCH_ORIGINATING_FOREST).StringValue.Equals(masterDomain)
            Dim IsSpoke As Boolean = (Not mANAme.Equals(masterMAName))
            ‘Provisioning OK if
            ‘- source = hub -> target = spoke
            ‘- source = spoke -> target = hub
            ‘Provisioning NOT OK if
            ‘- source = spoke -> target = spoke
            ‘Sample configuration with Hub: G1, spokes = G2,G3
            ‘Source Target  isHub   IsSpoke ShouldProvision
            ‘GAL1   GAL2    TRUE    TRUE    TRUE
            ‘GAL1   GAL3    TRUE    TRUE    TRUE
            ‘GAL2   GAL1    FALSE   FALSE   TRUE
            ‘GAL2   GAL3    FALSE   TRUE    FALSE
            ‘GAL3   GAL1    FALSE   FALSE   TRUE
            ‘GAL3   GAL2    FALSE   TRUE    FALSE
            ‘The function who matches this is an inverted XOR
            Return Not (IsSpoke Xor IsHub)
        End Function
In the Sub Provision, add a call to the ShouldProvision function, like
             For i = 0 To galMAs.Length – 1
                MA = mventry.ConnectedMAs(galMAs(i).MAName)
                If 0 = MA.Connectors.Count Then
                    ‘ If there were no connectors, then we are going to add one
                    If shouldprovision(mventry, galMAs(i).MAName) Then _
                    AddOrRenameConnector(MA, galMAs(i), mventry)

Leave a Reply

Please log in using one of these methods to post your comment: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s