XenDesktop 7.15 license server Puppet & Powershell DSC module

What is a Citrix XenDesktop 7.x license server ?

Every Citrix XenApp or XenDesktop deployment must have at least one Citrix License Server which can be either shared or dedicated to this site. On small Citrix deployments, like lab environment, the license server role can be installed in the same server than the Delivery Controller. Servers running Citrix products contact the License Server to obtain licenses : if users connect to a Citrix product, it draws licenses from the License Server. That is, the Citrix product requests to check out a license from the License Server on behalf of the user or client device. When the license is successfully checked out, the user can run the product.

The license types are:

  • User/device licenses : The license server can assign licenses to a user or a device and monitor license consumption. The licenses are assigned (and blocked) to this user or device for 90 days after the first conection, even if the user or device doesn’t connect anymore.When assigned to a user, the license allows access of this user from an unlimited number of devices. When assigned to a device, the license allows access from the device by an unlimited number of users.
  • Concurrent licenses : This type of license is not tied to a specific user : when a user starts a product, the product requests the license and it’s checked out to the specific computer or device that the user is using. When the user logs off or disconnects from the session, the license is checked back in and is available for another user.

If all licenses are in use, 15 days supplemental grace period enables unlimited connections to a product, allowing you to understand and address the issue. After the period expires, normal connection limits based on licenses available on the licensing server are enforced : when users disconnect, no new connections can occur until license levels return to normal.

Citrix license server Puppet & Powershell DSC module

Integration data

This xd7licenseserver Puppet & Powershell DSC module installs and configures the Citrix licensing server and the Microsoft RDS license server required for server based applications publishing (XenApp). The license file provided to this module is automatically installed on the Citrix Licensing server. Citrix XenApp / XenDesktop Product Edition is configured using the xd7mastercontroller Puppet class during XenDesktop 7.x site creation.

The Microsoft RDS license server has to be manually activated with the method of your choice (automatic, phone, …). it is automatically registered in the “Terminal Server License Servers” group in Active Directory.

The following options are available for a production-grade installation :
- Security : IIS SSL configuration to secure communications between Director and the client device.

Module usage

Module under development - Coming soon

Xd7licenseserver module structure: deploying the Citrix license server using Powershell DSC

Installing Citrix and RDS licensing software using XD7feature Powershell DSC resource

The Citrix licensing feature is automatically installed from the XenDesktop 7.x installation media using the XD7feature Powershell DSC resource.

dsc_xd7feature { 'XD7Licensing':
 dsc_role => 'Licensing',
 dsc_sourcepath => $sourcePath,
 dsc_ensure => 'present',

Importing Citrix XenDesktop 7.x license file using “file” Powershell DSC resource

The Citrix license file (.lic format) is downloaded in the c:\Program Files (x86)\Citrix\Licensing\MyFiles folder and the Citrix licensing service is restarted to trigger a new scan of the folder.

#Ensure Citrix licensing service is running
  ensure => 'running',
  enable => true

#Import and install Citrix license file in Citix licensing store and notify citrix licensing service to restart it
dsc_file{ 'CitrixLicenseFile':
 dsc_sourcepath => $licenseFilePath,
 dsc_destinationpath => 'c:\Program Files (x86)\Citrix\Licensing\MyFiles\citrixlicense.lic',
 dsc_type => 'File',
 notify => Service['CitrixWebServicesforLicensing']

Configuring Microsoft RDS license server required for XenApp deployments using WindowsFeature Powershell DSC resource

The Microsoft RDS license server and it’s associated management GUI are installed as Microsoft RDS licenses are required for publishing applications hosted on a server OS (SBC deployment).

The windows features are deployed using the WindowsFeature Powershell DSC resource.

if (($rdslicensing != '') and ($rdslicensing == 'install')) {
  #Needed for ActiveDirectory remote management using Powershell
  dsc_windowsfeature{ 'RSAT-AD-Powershell':
   dsc_ensure => 'Present',
   dsc_name => 'RSAT-AD-Powershell'

  #Install RDS licensing features (required for server based applications publication)
   dsc_ensure => 'Present',
   dsc_name   => 'RDS-Licensing',

   dsc_ensure => 'Present',
   dsc_name   => 'RDS-Licensing-UI',

  #Add computer in Terminal Server License Servers group in Active Directory
  dsc_xadgroup{ 'TerminalServerLicenseServers':
   dsc_groupname => 'Terminal Server License Servers',
   dsc_path => "CN=Builtin,DC=domain-test,DC=com",
   dsc_groupscope => 'DomainLocal',
   dsc_memberstoinclude => "${hostname}\$",
   dsc_ensure => 'present',
   dsc_psdscrunascredential => {'user' => $setup_svc_username, 'password' => $setup_svc_password}

Configure license server SSL certificate for trusted access using “file” Powershell DSC resource

Under development

if $https {
    #Download the certificate in citrix licensing repository
    dsc_file{ 'SSLCert':
      dsc_sourcepath => $sslCertificateSourcePath,
      dsc_destinationpath => '${env:ProgramFiles(x86)}\Citrix\Licensing\WebServicesForLicensing\Apache\conf\server.crt',
      dsc_type => 'File',
      notify => Service['CitrixWebServicesforLicensing']
    #Download the certificate private key in citrix licensing repository
    dsc_file{ 'SSLkey':
      dsc_sourcepath => $sslCertificateKeySourcePath,
      dsc_destinationpath => '${env:ProgramFiles(x86)}\Citrix\Licensing\WebServicesForLicensing\Apache\conf\server.key',
      dsc_type => 'File',
      notify => Service['CitrixWebServicesforLicensing']