Why won’t Setup use my updated topology?

Imagine you desperately want to get Microsoft Lync Server 2010 up and running. You quickly run Setup.exe, Prepare first Standard Edition server, install Topology Builder, use Topology Builder to create the topology and then perform steps 1 and 2 of the four steps for Installing or Updating Lync Server System:

  1. Install Local Configuration Store
  2. Setup or Remove Lync Server Components
  3. Request, Install or Assign Certificates
  4. Start Services

However after step 2 you realize you need to make a change to the topology. You startup Topology Builder, make the change and Publish Topology. You then re-run step 2, but it is not picking up the changes you made to the topology, even if Publish Topology succeeded. Why?? Let me explain.

Step 1 performs, among other things, installation & creation of the SQL Express instance rtclocal hosting the local replica of CMS (for a discussion about this see here) and loading of the configuration (including the topology) from the CMS master. When you ran this it loaded the initial copy of the topology you published the first time you ran Topology Builder.

When you ran Topology Builder the second time and did the second Publish you updated the CMS master. However you haven’t updated the local replica created in Step 1. After the first run of this step the Run button in the Setup UI is disabled and you can’t re-run it. Step 2 of the installation always reads from the local replica of CMS and it is therefore not picking up the changes you made to the topology. On an operational Lync Server the local replica is updated via CMS replication, but the server you are working on is not operational yet. So what can you do?

The easiest option is to start up Lync Server Management Shell on the server and issue the following two cmdlets:

  • Export-CsConfiguration –FileName <ZIP file to store the exported configuration>
  • Import-CsConfiguration –FileName <ZIP file storing the exported configuration> –LocalStore

Export-CsConfiguration will read the configuration (including the updated topology) from the CMS master and store it in a ZIP file. The Import-CsConfiguration with the –LocalStore switch will import the configuration in the local replica of CMS (in reality doing a manual CMS replication). After performing the two cmdlets you should be able to re-run step 2 above and it will pick up your topology changes.