Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pkg/
6 changes: 6 additions & 0 deletions .pmtignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
pkg/
tests/
assets/
_layouts/
_config.yml
.fixtures.yml
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Changelog - xd7director #

## Version 1.0.0
- Used custom fact to retrieve domain netbios name.
- Citrix Director service account creation and SPN configuration.
- Citrix Director installation and initial configuration
- IIS SSL binding configuration.
- Initial release.
96 changes: 51 additions & 45 deletions README.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -9,55 +9,61 @@ The following options are available for a production-grade installation :
- Security : IIS SSL configuration to secure communications between Director and the client device.
- Resiliency : Deployment of a Director pool in a load-balanced environment with SPN setup and Kerberos SSO capability.

## Requirements ##

The minimum Windows Management Framework (PowerShell) version required is 5.0 or higher, which ships with Windows 10 or Windows Server 2016, but can also be installed on Windows 7 SP1, Windows 8.1, Windows Server 2008 R2 SP1, Windows Server 2012 and Windows Server 2012 R2.

## Integration informations
Director runs with service account to improve security and allow the deployment of multiple Director instances (Director Pool) configured for Kerberos SSO login behind a load-balancer.
All the Director nodes in a Director Pool must have their Director IIS ApplicationPool be configured with the same service account and the same SPN.

The SSL certificate provided needs to be a password protected p12/pfx certificate including the private key. IIS HTTPS binding has to be activated manuelly with the SSL certificate deployed by puppet because of a compatibility issue between xWebsite DSC ressource and Storefront SDK powershell scripts.

The module can be installed on a Standard, Datacenter version of Windows 2012R2 or Windows 2016. **Core version is not supported by Citrix for delivery Controller installation**.

## Usage
### xd7director
This class will install and configure IIS and Citrix Director.
- **director_svc_username** : (string format username) : Director service account (on which Director IIS ApplicationPool will run). Use **username** format. **DO NOT** use DOMAIN\username format.
- **director_svc_password** : Password of the Director service account. Should be encrypted with hiera-eyaml.
- **setup_svc_username** : (string) Privileged account used by Puppet for installing the software.
- **setup_svc_password** : (string) Password of the privileged account. Should be encrypted with hiera-eyaml.
- **sourcePath** : (string) Path of a folder containing the Xendesktop 7.x installer (unarchive the ISO image in this folder).
- **deliveryControllers** : (String) List of Citrix Delivery Controllers of the XenDesktop7 site 'srv-cxdc01.domain.net, srv-cxdc012.domain.net'
- **domainName** : (string) Active Directory domain name (full)
- **domainNetbiosName** : (string) : Active Directory domain NETBIOS name.
- **loadbalandedDirector** : true or false. Is Director deployed behind a load-balancer ? Default : false
- **loadbalancedDirectorFqdn** (string)(optionnal) FQDN of the Director pool associated to the virtual server IP configured on the loadbalancer
- **https** : (boolean) : true or false. Deploy SSL certificate on IIS and activate SSL access to Storefront ? Default : false
- **sslCertificateSourcePath** : (string) Location of the SSL certificate (p12 / PFX format with private key). Can be local folder, UNC path, HTTP URL)
- **sslCertificatePassword** : (string) Password protecting the p12/pfx SSL certificate file.
- **sslCertificateThumbprint** : (string) Thumbprint of the SSL certificate (available in the SSL certificate).
- **caCertificateSourcePath** : (string) Location of the SSL Certification Autority root certificate (PEM or CER format). Can be local folder, UNC path, HTTP URL)
- **caCertificateThumbprint** : (string) Thumbprint of the SSL Certification Autority root certificate (available in the SSL certificate).
This module requires a custom version of the puppetlabs-dsc module compiled with [XenDesktop7](https://github.com/VirtualEngine/XenDesktop7) Powershell DSC resource as a dependency. Ready to use virtualdesktopdevops/dsc v1.5.0 puppet module provided on [Puppet Forge](https://forge.puppet.com/virtualdesktopdevops/dsc).

## Change log ##

A full list of changes in each version can be found in the [change log](CHANGELOG.md).


## Integration informations ##
Citrix Director runs with the identity of a service account to improve security and allow the deployment of multiple Director instances (Director Pool) configured for Kerberos SSO login behind a load-balancer.
All the Director nodes in a Director Pool must have their Director IIS ApplicationPool be configured to use the same service account and the same SPN.

The module can be installed on a Standard, Datacenter version of Windows 2012R2 or Windows 2016. **Core version is not supported by Citrix for Director installation**.

Puppet example code has been updated to future parser syntax (4.x). All the parameters refering to remote locations (file shares) have to be prefixed with \\\\ instead of the classical \\. This is because of Puppet >= 4.x parsing \\ as a single \ in single-quoted strings. Use parser = future in puppet 3.x /etc/puppet/puppet.conf to use this module in your existing Puppet 3.x deployment and prepare Puppet 4.x migration.

## Usage ##
### xd7director parameters###

- **`[String]` director_svc_username** _(Required)_: Director service account (on which Director IIS ApplicationPool will run). Use **username** format. **DO NOT** use DOMAIN\username format.
- **`[String]` director_svc_password** _(Required)_: Password of the Director service account. Should be encrypted with hiera-eyaml.
- **`[String]` setup_svc_username** _(Required)_: Privileged account used by Puppet for installing the software.
- **`[String]` setup_svc_password** _(Required)_: Password of the privileged account. Should be encrypted with hiera-eyaml.
- **`[String]` sourcepath** _(Required)_: Path of a folder containing the Xendesktop 7.x installer (unarchive the ISO image in this folder).
- **`[String]` deliverycontrollers** _(Required)_: List of Citrix Delivery Controllers of the XenDesktop7 site 'srv-cxdc01.domain.net, srv-cxdc012.domain.net'
- **`[Boolean]` loadbalandeddirector** _(Optional, default is false)_: Is Director deployed behind a load-balancer ? Default : false
- **`[String]` loadbalanceddirectorfqdn** _(Required, if loadbalandeddirector = true)_: FQDN of the Director pool associated to the virtual server IP configured on the loadbalancer
- **`[Boolean]` https** _(Optional, default is false)_: Deploy SSL certificate on IIS and activate SSL access to Storefront ? Default : false
- **`[String]` sslcertificatesourcepath** _(Required if https = true)_: Location of the SSL certificate (p12 / PFX format with private key). Can be local folder, UNC path, HTTP URL)
- **`[String]` sslcertificatepassword** _(Required if https = true)_: Password protecting the p12/pfx SSL certificate file.
- **`[String]` sslcertificatethumbprint** _(Required if https = true)_: Thumbprint of the SSL certificate (available in the SSL certificate).
- **`[String]` cacertificatesourcepath** _(Required if https = true)_: Location of the SSL Certification Autority root certificate (PEM or CER format). Can be local folder, UNC path, HTTP URL)
- **`[String]` cacertificatethumbprint** _(Required if https = true)_: Thumbprint of the SSL Certification Autority root certificate (available in the SSL certificate).

### xd7director example code###
~~~puppet
node 'director' {
class{'xd7director':
director_svc_username => 'svc-director',
director_svc_password => 'P@ssw0rd',
setup_svc_username => 'TESTLAB\svc-puppet',
setup_svc_password => 'P@ssw0rd',
sourcepath => '\\fileserver\xendesktop715',
deliverycontrollers => 'srv-cxdc01.testlab.com, srv-cxdc02.testlab.com',
domainName => 'TESTLAB.COM',
domainNetbiosName=> 'TESTLAB',
loadbalandedDirector => true,
loadbalancedDirectorFqdn => 'director.testlab.com',
https => true,
sslCertificateSourcePath => '\\fileserver\ssl\cxdirector.pfx',
sslCertificatePassword => 'P@ssw0rd',
sslCertificateThumbprint => '44cce73845feef4da4d369a37386c862eb3bd4e1',
caCertificateSourcePath => '\\fileserver\ssl\ca-root.pem',
caCertificateThumbprint => '48jise7dssdsd4da4d369a3738dsdsdeeb3sdiu3'
}
class{'xd7director':
director_svc_username => 'svc-director',
director_svc_password => 'P@ssw0rd',
setup_svc_username => 'TESTLAB\svc-puppet',
setup_svc_password => 'P@ssw0rd',
sourcepath => '\\\\fileserver\\xendesktop715',
deliverycontrollers => 'srv-cxdc01.testlab.com, srv-cxdc02.testlab.com',
loadbalandeddirector => true,
loadbalanceddirectorfqdn => 'director.testlab.com',
https => true,
sslcertificatesourcepath => '\\\\fileserver\\ssl\\cxdirector.pfx',
sslcertificatepassword => 'P@ssw0rd',
sslcertificatethumbprint => '44cce73845feef4da4d369a37386c862eb3bd4e1',
cacertificatesourcepath => '\\\\fileserver\\ssl\\ca-root.pem',
cacertificatethumbprint => '48jise7dssdsd4da4d369a3738dsdsdeeb3sdiu3'
}
}
~~~
14 changes: 13 additions & 1 deletion _config.yml
Original file line number Diff line number Diff line change
@@ -1 +1,13 @@
theme: jekyll-theme-slate
title: Citrix Xendesktop 7.x Director puppet module
description: Puppet modules installing Citrix Director, which provides Citrix XenDesktop 7.x deployment monitoring capabilities. Director is linked to the XenApp/XenDesktop site Delivery Controllers and configured for Kerberos SSO login, enhancing security level and speeding access to the monitoring interface.
google_site_verification: R71XDERzPOp9lUudi8X6iKrpcoIgDG_1HzRMz_TMaDY
google_analytics: UA-12767493-6
theme: jekyll-theme-slate
plugins:
- jekyll-seo-tag
- jekyll-sitemap
- jekyll-feed
- jekyll-redirect-from
- jekyll-mentions
jekyll-mentions:
base_url: http://www.virtualdesktopdevops.com
88 changes: 88 additions & 0 deletions _layouts/default.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<!DOCTYPE html>
<html lang="{{ site.lang | default: "en-US" }}">

<head>
<meta charset='utf-8'>
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="width=device-width,maximum-scale=2">
<meta name="description" content="{{ site.title | default: site.github.repository_name }} : {{ site.description | default: site.github.project_tagline }}">

<link rel="stylesheet" type="text/css" media="screen" href="{{ '/assets/css/style.css?v=' | append: site.github.build_revision | relative_url }}">

<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

{% seo %}
</head>

<body>

<!-- HEADER -->
<div id="header_wrap" class="outer">
<header class="inner">
<a id="forkme_banner" href="{{ site.github.repository_url }}">View on GitHub</a>

<h1 id="project_title">{{ site.title | default: site.github.repository_name }}</h1>
<h2 id="project_tagline">{{ site.description | default: site.github.project_tagline }}</h2>

{% if site.show_downloads %}
<section id="downloads">
<a class="zip_download_link" href="{{ site.github.zip_url }}">Download this project as a .zip file</a>
<a class="tar_download_link" href="{{ site.github.tar_url }}">Download this project as a tar.gz file</a>
</section>
{% endif %}
</header>
</div>

<!-- MAIN CONTENT -->
<div id="main_content_wrap" class="outer">
<section id="main_content" class="inner">
<div class=class="container-fluid">
<div class="row">
<div class="col-md-8">
{{ content }}
</div>
<div class="col-md-4">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- 300x600 virtualdesktopdevops.github.io -->
<ins class="adsbygoogle"
style="display:inline-block;width:300px;height:600px"
data-ad-client="ca-pub-5008821634947841"
data-ad-slot="8665929525"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
</div>
</section>
</div>

<!-- FOOTER -->
<div id="footer_wrap" class="outer">
<footer class="inner">
{% if site.github.is_project_page %}
<p class="copyright">{{ site.title | default: site.github.repository_name }} maintained by <a href="{{ site.github.owner_url }}">{{ site.github.owner_name }}</a></p>
{% endif %}
<p>Published with <a href="https://pages.github.com">GitHub Pages</a></p>
</footer>
</div>

{% if site.google_analytics %}
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', '{{ site.google_analytics }}', 'auto');
ga('send', 'pageview');
</script>
{% endif %}
</body>
</html>
11 changes: 11 additions & 0 deletions assets/css/style.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
---

@import "{{ site.theme }}";

.inner {
position: relative;
max-width: 1200px;
padding: 20px 10px;
margin: 0 auto;
}
Loading