Nutanix Connect Blog

Welcome to the Nutanix NEXT community. To get started please read our short welcome post. Thanks!

cancel
Showing results for 
Search instead for 
Did you mean: 
Community Manager

Setting up Citrix XA/XD with an Acropolis Hypervisor cluster

This post was authored by Raghu Nandan, Director of Product Management

 

Nutanix and Citrix recently announced support for running XenApp and XenDesktop instances on a Nutanix Acropolis cluster, with the Acropolis Hypervisor. We followed this announcement up with support for Citrix’s Workspace Cloud as well.

 

The ability to integrate with the XA/XD 7.6 controllers, for VM provisioning and power management is something that is being worked on. In the interim, this article describes how such a setup can be configured with scripted provisioning of instances. Using steps in this article, XenApp/ XenDesktop environments can be configured to work with Nutanix Acropolis Hypervisor clusters.

 

NOTE: If the Nutanix Acropolis clusters have been imaged with ESXi or Hyper-V, then native integration with the XenDesktop/ XenApp components is already available. This support has been shipping for several years now, with hundreds of successful deployments

 

Steps to integrated with the Acropolis Hypervisor (AHV) clusters -

  • Prepare the base image, with the right client or server VDA installed
  • Sysprep this instance with OOBE, Generalize and Shutdown options selected
  • This base image would be the basis for the clone operation
  • Create an ISO with the unattend.xml (Samples at https://technet.microsoft.com/en-us/library/cc732280(v=ws.10).aspx) at the top level directory.
  • The script below (acc.sh) shows the commands that can be batched into the Nutanix CLI from an SSH connection.
    • The script basically creates a VM with incrementing numbers at the end of the name prefix
    • You can change the vCPU and memory to values that you want
    • One disk on the clone will be the base image prepared in step #3 above
    • A second disk will be based on the ISO created in step #4 above
  • When these VMs are powered on, it should come up with a random hostname, domain join, and then be registered with the Studio – so connection brokering to the instances can happen

Code Sample

 

acc.sh (Sample)
————————————————————————————————————————
#!/bin/bash

if [ $# -ne 4 ]; then
  echo
  echo "Usage: ./acc <vm-name> <image-name> <num-of-vms> <ISO-Path>"
  echo "This script accepts name of VM, name of Image, number of Vms and the path to the unattend.xml ISO"
  echo "  and creates the VMs"
  echo
  exit
fi

VM_NAME=$1
IMAGE_NAME=$2
NUM_VMS=$3
ISO_PATH=$4

for i in `seq 1 $NUM_VMS`
do
  echo "Create VM" $VM_NAME-$i
  acli vm.create $VM_NAME-$i
  acli vm.update $VM_NAME-$i num_vcpus=1 memory=1G
  acli vm.disk_create $VM_NAME-$i clone_from_image=$IMAGE_NAME clone_min_size=100G
  acli.vm.disk_create $VM_NAME-$i cdrom=true clone_from_nfs_file=$ISO_PATH
  acli vm.on $VM_NAME-$i
done

echo
————————————————————————————————————————

 

unattend.xml (Sample)
————————————————————————————————————————
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="oobeSystem">
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <UserAccounts>
                <LocalAccounts>
                    <LocalAccount wcm:action="add">
                        <Name>Admin</Name>
                        <Group>Administrators;Users</Group>
                        <Password>
                            <Value>Password</Value>
                            <PlainText>true</PlainText>
                        </Password>
                    </LocalAccount>
                </LocalAccounts>
                <AdministratorPassword>
                    <Value>Password</Value>
                    <PlainText>true</PlainText>
                </AdministratorPassword>
            </UserAccounts>
            <OOBE>
                <HideEULAPage>true</HideEULAPage>
                <ProtectYourPC>3</ProtectYourPC>
                <SkipUserOOBE>true</SkipUserOOBE>
            </OOBE>
        </component>
        <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <InputLocale>0809:00000809</InputLocale>
            <SystemLocale>en-GB</SystemLocale>
            <UILanguage>en-US</UILanguage>
            <UserLocale>en-GB</UserLocale>
        </component>
    </settings>
    <settings pass="specialize">
        <component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <Identification>
                <Credentials>
                    <Domain>Domain</Domain>
                    <Password>Password</Password>
                    <Username>Administrator</Username>
                </Credentials>
                <JoinDomain>xyz.domain.com</JoinDomain>
                <MachineObjectOU>OU=Computers,OU=OU1,OU=OU2,DC=xyz,DC=abc,DC=def,DC=domain,DC=com</MachineObjectOU>
                <UnsecureJoin>false</UnsecureJoin>
            </Identification>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <ComputerName>*</ComputerName>
            <RegisteredOrganization>Organization</RegisteredOrganization>
            <RegisteredOwner>Owner</RegisteredOwner>
            <TimeZone>GMT Standard Time</TimeZone>
        </component>
        <component name="Microsoft-Windows-DNS-Client" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <Interfaces>
                <Interface wcm:action="add">
                    <DNSServerSearchOrder>
                        <IpAddress wcm:action="add" wcm:keyValue="1">10.30.144.27</IpAddress>
                    </DNSServerSearchOrder>
                    <Identifier>Ethernet</Identifier>
                    <DisableDynamicUpdate>false</DisableDynamicUpdate>
                </Interface>
            </Interfaces>
        </component>
    </settings>
</unattend>
————————————————————————————————————————

 

This blog article is superseded by the complete UI integration between Nutanix AHV clusters and Citrix XenApp/ XenDesktop - as detailed here - Moving the Nutanix-Citrix Product Integration for AHV to the Next Level

1 Comment
Nutanix Employee

Hi, I ran through the unattend.xml procedure on a Windows 7 image and added the following line to the <OOBE> section to keep the network pop-up from coming up.

 

<NetworkLocation>Other</NetworkLocation>

 

Labels
Top Kudoed Authors
User Kudos Count
3
1
1