Create a Custom Edge Server Input File (Office Communications Server 2007 Migration)
Topic Last Modified: 2011-04-06
The previous topic, Define Edge Server Input File (Office Communications Server 2007 Migration), defined the building blocks for the input file required to merge the legacy topology by using the Lync Server Management Shell. This topic dives deeper into the layout and purpose of the input.xml file. It explains the various parameters you need to set when authoring the Edge Server input.xml file.
The input.xml file, which can be created using any text editor, should look like this:
<?xml version="1.0" encoding="utf-8"?>
<TopologyInput xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.LegacyUserInput.2008" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<EdgeClusters>
<EdgeCluster AP="true" MR="false" DP="false" Version="OCS2007" FederationEnabled="true">
<LoadBalancer InternalFqdn="edgeint.fqdn" ExternalDPFqdn="ExternalDP.Fqdn " />
<Machines>
<Machine InternalFqdn = "node1.fqdn"/>
<Machine InternalFqdn = "anothernode1.fqdn"/>
</Machines>
<Ports InternalAPPort="5061" />
<DirectorOrEdgeNextHop Fqdn="director.fqdn.com " />
</EdgeCluster>
</EdgeClusters>
<RegistrarClusterPort EnableAutoDiscoveryOfPorts = "false" Port = "5065" />
</TopologyInput>
So what does all that mean? Well, to begin with, your XML file should start with the following XML declaration: <?xml version="1.0" encoding="utf-8"?>
Note
Although it is optional, the XML declaration helps avoid any confusion regarding the version or encoding type used in the file.
After the XML declaration you should then insert the <TopologyInput> element, like so:
<TopologyInput xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.LegacyUserInput.2008" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
This element is important: if <TopologyInput> is not present then schema validation will not take place. In turn, that could cause Merge-CsLegacyTopology to try to merge a poorly formed XML file. It’s important that this be a well-formed XML file. As a result, you also need to add a closing tag for the <TopologyInput> element: </TopologyInput>
That means that your XML file should now look like this:
<?xml version="1.0" encoding="utf-8"?>
<TopologyInput xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.LegacyUserInput.2008" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</TopologyInput>
With the basic file structure in place, you’re now ready to identify the Edge Server components deployed in Office Communications Server; that’s something you do inside the <EdgeClusters> element. Your next step is to add opening and closing tags for the <EdgeClusters> element to the XML file:
<?xml version="1.0" encoding="utf-8"?>
<TopologyInput xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.LegacyUserInput.2008" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<EdgeClusters>
</EdgeClusters>
</TopologyInput>
Inside the <EdgeClusters> element you then add as many as five child elements:
<EdgeCluster>. The <EdgeCluster> element is where you define the different Edge Server roles in your existing Office Communications Server topology. There are three roles you need to concern yourself with:
Access Edge Server. Previously known as the Access Proxy server, the Access Edge Server is responsible for handling all SIP traffic that crosses your organization’s firewall. If your topology includes an Access Edge Server, you need to add this attribute to the <EdgeCluster> element:
AP="true"
Web Conferencing Edge Server. The Web Conferencing Edge Server (also known as the Data Proxy server) relays traffic between the Web Conferencing Server and external clients. For Office Communications Server 2007 Edge Server deployments, only external access (AE) through the legacy Edge Server is supported. You need to add this attribute to the <EdgeCluster> element:
DP="false"
A/V Edge Server. The A/V Edge Server (also known as the Media Relay server) provides a single connection point that enables incoming and outgoing media traffic to help firewalls and network address translation (NAT) devices. For Office Communications Server 2007 Edge Server deployments, only external access (AE) through the legacy Edge Server is supported. You need to add this attribute to the <EdgeCluster> element:
MR="false"
Next, specify the version of Office Communications Server running in your legacy domain. For Office Communications Server 2007, use this attribute and attribute value:
Version="OCS2007"
Finally, if you have enabled federation in Office Communications Server, you should add the FederationEnabled attribute to the <EdgeCluster> element:
FederationEnabled="true"
A completed <EdgeCluster> element will look like this:
<EdgeCluster AP="true" MR="false" DP="false" Version="OCS2007" FederationEnabled="true">
<LoadBalancer>. The <LoadBalancer> element contains the fully qualified domain names (FQDNs) for both your internal Edge Server load balancer and your external Edge Server load balancers. Note that for external load balancers, you must specify all your load balancers, including the Access Edge (AP), Web Conferencing (DP), and A/V Edge (MR) load balancers. A complete <LoadBalancer> tag should look something like this:
<LoadBalancer InternalFqdn="edgeint.fqdn " ExternalDPFqdn="ExternalDP.Fqdn" />
If you do not use Edge Server load balancers then this element can be omitted.
<Machine>. The <Machine> element contains the FQDN of your Edge Server (note that this should be the server’s internal name). For example:
<Machine InternalFqdn="node1.fqdn" />
<Ports>. Use the <Ports> element to indicate the ports used by your Edge Servers. An APPort indicates an Access Edge Server, a DPPort indicates a Web Conferencing Edge Server, and an MRPort indicates a Media Relay Server. For Office Communications Server 2007 Edge Server deployments, only external access (AE) through the legacy Edge Server is supported. You need to add this attribute to the <Ports> element:
<Ports InternalAPPort="5061" />
<DirectorOrEdgeNextHop>. The <DirectorOrEdgeNextHop> element contains the FQDN of your Edge Server’s next hop server:
<DirectorOrEdgeNextHop Fqdn="director.fqdn.com" />
If the next hop server is a Director then you must add the attributeIsDirector="true":
<DirectorOrEdgeNextHop Fqdn=" director.fqdn.com " IsDirector="true" />
If the
IsDirector
attribute is not set to ‘True,’ then Lync Server 2010 will not be able to use the Office Communications Server 2007 Director for federation.Upon completion, the element should look similar to the following:
<EdgeClusters> <EdgeCluster AP="true" MR="false" DP="false" Version="OCS2007"> <LoadBalancer InternalFqdn="edgeint.fqdn" ExternalDPFqdn="ExternalDP.Fqdn /> <Machines> <Machine InternalFqdn = "node1.fqdn"/> <Machine InternalFqdn = "anothernode1.fqdn"/> </Machines> <Ports InternalAPPort="5061" /> <DirectorOrEdgeNextHop Fqdn="director.fqdn.com " /> </EdgeCluster> </EdgeClusters>
All that’s left now is to add the <RegistrarClusterPort> element; this is the section of the XML file where you define the port and the transport type for your Registrar cluster. A completed <RegistrarClusterPort> element, one that defines port 5065 and transport type mutual TLS (MTLS), will look like the following:
<RegistrarClusterPort EnableAutoDiscoveryOfPorts = "false" Port = "5065" />
The following conditions apply to the EnableAutoDiscoveryOfPorts parameter:
EnableAutoDiscoveryOfPorts is a required parameter but Port is an optional parameter.
If EnableAutoDiscoveryOfPorts is true and Port is provided, then the value of Port is ignored.
If EnableAutoDiscoveryOfPorts is false and Port is provided, then value of Port is used.
If EnableAutoDiscoveryOfPorts is false and Port is not provided, an error is logged as this is an unsupported configuration.
So finally, that gives us an XML file that can be used with the Merge-CsLegacyTopology cmdlet:
<?xml version="1.0" encoding="utf-8"?>
<TopologyInput xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.LegacyUserInput.2008" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<EdgeClusters>
<EdgeCluster AP="true" MR="false" DP="false" Version="OCS2007" FederationEnabled="true">
<LoadBalancer InternalFqdn="edgeint.fqdn" ExternalDPFqdn="ExternalDP.Fqdn " />
<Machines>
<Machine InternalFqdn = "node1.fqdn"/>
<Machine InternalFqdn = "anothernode1.fqdn"/>
</Machines>
<Ports InternalAPPort="5061" />
<DirectorOrEdgeNextHop Fqdn="director.fqdn.com " />
</EdgeCluster>
</EdgeClusters>
<RegistrarClusterPort EnableAutoDiscoveryOfPorts = "false" Port = "5065" />
</TopologyInput>