ILM GALSync with hub-and-spoke architecture
-
Monday, June 07, 2010 10:38 PM
ILM Knowledge Bit 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 GALSync setup.
Hub-and-spoke architecture means one master GAL domain which communicates with slave domains, without direct provisioning between slave domains.

For ease of use, I've put the decision logic in one function (shouldprovision).
In the GALMV.vb file you need to create a private function (based on VB.NET code):Private Function shouldprovision( _
ByVal currentMVentry As MVEntry, _
ByVal mANAme As String) As Boolean
'The only domain and MA name you need to know is the master domain
'The master domain name is the FQDN of the AD domain
'this is compared with the msOriginationForest attribute
Const masterDomain As String = "g1.local" 'msOriginatingForest format
'The master MA Name is the GALSync MA Name in the ILM GUI
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
'1. source = hub and target = spoke
'2. source = spoke and target = hub
'Provisioning NOT OK if
'source = spoke and target = spoke
'Sample configuration with Hub: GAL1, spokes = GAL2,GAL3
'See Truth table below
'The function who matches this functionality is an inverted XOR
'More info: http://en.wikipedia.org/wiki/XNOR_gate
Return Not (IsSpoke Xor IsHub)
End Function
Truth table:
'Source MA
Target MA
isHub
IsSpoke
ShouldProvision Result
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
In the Sub Provision of the GALMV.vb extension, 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
'
'## NEW CODE SNIPPET##>
If shouldprovision(mventry, galMAs(i).MAName) THEN _ '<## NEW CODE SNIPPET##
AddOrRenameConnector(MA, galMAs(i), mventry)
ElseIf 1 = MA.Connectors.Count Then
/../
In this way the provisioning is blocked if not allowed.
If you wish to convert your VB.NET code snippet to C# quickly (or vice versa), check the Developer Fusion tools.
Go to the ILM Knowledge Bit Collection
Peter Geelen - Sr. Consultant IDA (http://www.fim2010.be)
[If a post helps to resolve your issue, please click the "Mark as Answer" or "Helpful" button at the top of that post. By marking a post as Answered or Helpful, you help others find the answer faster.]- Edited by Peter Geelen - MSFTMicrosoft Employee Tuesday, June 08, 2010 6:30 AM
All Replies
-
Tuesday, June 08, 2010 12:05 AMModerator
This is very cool, Peter!
Thanks for posting!Cheers,
Markus
Markus Vilcinskas, Knowledge Engineer, Microsoft Corporation -
Friday, November 05, 2010 2:48 PM
Sweet Post! Thank you for linking it to the GalSync Wiki
Tim
Timothy P Macaulay, MCSD, MCSD.NET, MCAD, MCP

