diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..01d0a08 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +pkg/ diff --git a/.pmtignore b/.pmtignore new file mode 100644 index 0000000..3b056e1 --- /dev/null +++ b/.pmtignore @@ -0,0 +1,5 @@ +pkg/ +tests/ +assets/ +_config.yml +.fixtures.yml diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..f96b437 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,8 @@ +# Changelog - xd7storefront # + +## Version 1.0.0 ## +- Puppet types for Storefront Store and Netscaler gateway configuration +- IIS SSL configuration to secure communications between Storefront and the client device +- SSL configuration to secure communications with the Citrix XML service +- Citrix Storefront and Microsoft IIS installation and configuration with default store creation +- Initial release diff --git a/README.markdown b/README.markdown index a1a6a74..e5fafce 100644 --- a/README.markdown +++ b/README.markdown @@ -1,42 +1,52 @@ -# xd7storefront # +# Citrix XenDesktop 7 Storefront puppet module # -This modules install a fully working Citrix 7.x Storefront and a default Store. It provides puppet types configuration of additionnal stores as well as Netscaler Gateways for external access. +This modules install a fully working Citrix XenDesktop 7.x Storefront and a default Store. It provides puppet types configuration of additionnal stores as well as Netscaler Gateways for external access. The following options are available for a production-grade installation : -- Sécurity : SSL configuration to secure communications with the Citrix XML service -- Sécurity : IIS SSL configuration to secure communications between Storefront and the client device. +- Security : SSL configuration to secure communications with the Citrix XML service +- Security : IIS SSL configuration to secure communications between Storefront and the client device. +## Requirements ## -## Integration informations -Storefront is deployed with a default store configured during install. +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. -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. +This module requires a custom version of the puppetlabs-dsc module compiled with [XenDesktop7](https://github.com/VirtualEngine/XenDesktop7) and [Storefront](https://github.com/VirtualEngine/Storefront/) Powershell DSC resources as a dependency. Ready to use virtualdesktopdevops/dsc v1.5.0 puppet module provided on [Puppet Forge](https://forge.puppet.com/virtualdesktopdevops/dsc). -The SSL trust chain is checked by Storefront during HTTPS web access and callback process to Netscaler Gateway. The server certificate deployed for Storefrot (IIS HTTPS binding) and Netscaler Callback VIP have to be signed by the Certification Authority certificate deployed in this puppet module. **Client access to Storefront will fail with self signed certificates or if Storefront is not able to verify the SSL trust chain. +## Change log ## -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**. +A full list of changes in each version can be found in the [change log](CHANGELOG.md). -## Usage -### xd7storefront -This class will install and configure IIS and Citrix Storefront. Storefront deployment is initialized after installation and a default store is created. other stores will be installed later using the xd7storefront::store type. -- **baseurl** : (string) Storefront cluster/group base url, i.e. 'https://storefront.domain.com/'. -- **svc_username** : (string) Privileged account used by Puppet for installing the software. -- **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). -- **xd7sitename** : (string) Name of the Xendesktop farm hosted on the Delivery Controllers to which Storefront will be linked -- **xd7farmType** : (string : XenDesktop or XenApp) The type of Citrix XenDesktop site/farm hosted on the Delivery Controllers to which Storefront will be linked -- **deliverycontrollers** : (Array of String) List of Citrix Delivery Controllers of the XenDesktop7 site ['srv-cxdc01.domain.net', 'srv-cxdc012.domain.net'] -- **deliveryControllersPort** :(Int) Delivery Controllers XML service communication port. If not specified, defaults to 443. -- **deliveryControllersTransportType** : (String) Delivery Controllers XML service transport type. Valid values are: HTTP, HTTPS, SSL. If not specified, defaults to "HTTPS". -- **deliveryControllersLoadBalance** : (boolean) Round robin load balance the xml service servers. If not specified, defaults to True. -- **storefrontAuthMethods** : (Array of String) Storefront user uthentification method. Must be an array with at least one of the following values : [ 'Certificate', 'CitrixAGBasic', 'CitrixFederation', 'ExplicitForms', 'HttpBasic', 'IntegratedWindows' ] -- **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). +## Integration informations ## +Storefront is deployed with a default store configured during install. + +The SSL certificate provided needs to be a password protected p12/pfx certificate including the private key. + +The SSL trust chain is checked by Storefront during HTTPS web access and callback process to Netscaler Gateway. The server certificate deployed for Storefront (IIS HTTPS binding) and Netscaler Callback VIP have to be signed by the Certification Authority certificate deployed in this puppet module. **Client access to Storefront will fail with self signed certificates or if Storefront is not able to verify the SSL trust chain.** + +The module can be installed on a Standard, Datacenter version of Windows 2012R2 or Windows 2016. + +## Usage ## +### xd7storefront ### +This class will install and configure IIS and Citrix Storefront. Storefront deployment is initialized after IIS installation and a default store is created. Additionnal stores can be configured later using the xd7storefront::store puppet type. + +- **`[String]` baseurl** _(Required)_: Storefront cluster/group base url, i.e. 'https://storefront.domain.com/'. +- **`[String]` svc_username** _(Required)_: Privileged account used by Puppet for installing IIS and Citrix Storefront. +- **`[String]` svc_password** _(Required)_: Password of the privileged account. Should be encrypted with hiera-eyaml. +- **`[String]` sourcepath** _(Required)_: Path of a folder containing the Citrix Xendesktop 7.x installer (unarchive the ISO image in this folder). +- **`[String]` xd7sitename** _(Required)_: Name of the Xendesktop 7 farm hosted on the Delivery Controllers to which Storefront will be linked +- **`[String Array]` deliverycontrollers** _(Required)_: List of Citrix Delivery Controllers of the XenDesktop 7 site ['srv-cxdc01.domain.net', 'srv-cxdc012.domain.net'] +- **`[Uint32]` deliverycontrollersport** _(Optional, default is 443)_: Delivery Controllers XML service communication port. If not specified, defaults to 443. +- **`[String]` deliverycontrollerstransporttype** _(Optional, default is HTTPS)_: Delivery Controllers XML service transport type. Valid values are: HTTP, HTTPS, SSL. If not specified, defaults to "HTTPS". +- **`[Boolean]` deliverycontrollersloadbalance** _(Optional, default is true)_: Round robin load balance the xml service servers. If not specified, defaults to True. +- **`[String]` xd7farmtype** _(Optional `[XenDesktop|XenApp]`, default is XenDesktop)_: The type of Citrix XenDesktop site/farm hosted on the Delivery Controllers to which Storefront will be linked +- **`[String Array]` storefrontauthmethods** _(Optional, default is `['ExplicitForms','IntegratedWindows']`)_: Storefront user authentification method. Must be an array with at least one of the following values : `[ 'Certificate', 'CitrixAGBasic', 'CitrixFederation', 'ExplicitForms', 'HttpBasic', 'IntegratedWindows' ]` +- **`[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). ~~~puppet node 'storefront' { @@ -44,36 +54,36 @@ node 'storefront' { baseurl => 'https://storefront.testlab.com/' svc_username => 'TESTLAB\svc-puppet', svc_password => 'P@ssw0rd', - sourcepath => '\\fileserver\xendesktop715', + sourcepath => '\\\\fileserver\xendesktop715', xd7sitename => 'XD7TestSite', - xd7farmType => 'XenDesktop', + xd7farmtype => 'XenDesktop', deliverycontrollers => ['srv-cxdc01.testlab.com', 'srv-cxdc02.testlab.com'], - deliveryControllersTransportType => 'HTTPS', - deliveryControllersPort => 443, - deliveryControllersLoadBalance => true, - storefrontAuthMethods => ['IntegratedWindows', 'ExplicitForms'] + deliverycontrollerstransporttype => 'HTTPS', + deliverycontrollersport => 443, + deliverycontrollersloadbalance => true, + storefrontauthmethods => ['IntegratedWindows', 'ExplicitForms'] https => true, - sslCertificateSourcePath => '\\fileserver\ssl\cxdc.pfx', - sslCertificatePassword => 'P@ssw0rd', - sslCertificateThumbprint => '44cce73845feef4da4d369a37386c862eb3bd4e1', - caCertificateSourcePath => '\\fileserver\ssl\ca-root.pem', - caCertificateThumbprint => '48jise7dssdsd4da4d369a3738dsdsdeeb3sdiu3' + sslcertificatesourcepath => '\\\\fileserver\ssl\cxdc.pfx', + sslcertificatepassword => 'P@ssw0rd', + sslcertificatethumbprint => '44cce73845feef4da4d369a37386c862eb3bd4e1', + cacertificatesourcepath => '\\\\fileserver\ssl\ca-root.pem', + cacertificatethumbprint => '48jise7dssdsd4da4d369a3738dsdsdeeb3sdiu3' } } ~~~ -###xd7storefront::store -Puppet type to configure additionnal stores to a Storefront deployment. Can be declared multiple times in a node configuation. +### xd7storefront::store ### +Puppet type to configure additionnal stores to a Citrix Storefront deployment. Can be declared multiple times in a node configuation. -- **storeName** : (string) Name of the storefront store. Will be used as a Friendly name and as a base for store URL construction. -- **xd7sitename** : (string) Name of the Xendesktop farm hosted on the Delivery Controllers to which Storefront will be linked -- **xd7farmType** : (string : XenDesktop or XenApp) The type of Citrix XenDesktop site/farm hosted on the Delivery Controllers to which Storefront will be linked -- **deliverycontrollers** : (Array of String) List of Citrix Delivery Controllers of the XenDesktop7 site ['srv-cxdc01.domain.net', 'srv-cxdc012.domain.net'] -- **deliveryControllersPort** :(Int) Delivery Controllers XML service communication port. If not specified, defaults to 443. -- **deliveryControllersTransportType** : (String) Delivery Controllers XML service transport type. Valid values are: HTTP, HTTPS, SSL. If not specified, defaults to "HTTPS". -- **deliveryControllersLoadBalance** : (boolean) Round robin load balance the xml service servers. If not specified, defaults to True. -- **storefrontAuthMethods** : (Array of String) Storefront user uthentification method. Must be an array with at least one of the following values : [ 'Certificate', 'CitrixAGBasic', 'CitrixFederation', 'ExplicitForms', 'HttpBasic', 'IntegratedWindows' ] +- **`[String]` storeName** _(Required)_: Name of the storefront store. Will be used as a Friendly name and as a base for store URL construction. +- **`[String]` xd7sitename** _(Required)_: Name of the Xendesktop farm hosted on the Delivery Controllers to which Storefront will be linked +- **`[String Array]` deliverycontrollers** _(Required)_: List of Citrix Delivery Controllers of the XenDesktop 7 site `['srv-cxdc01.domain.net', 'srv-cxdc012.domain.net']` +- **`[UInt32]` deliverycontrollersport** _(Optional, default is 443)_: Delivery Controllers XML service communication port. If not specified, defaults to 443. +- **`[String]` deliverycontrollerstransporttype** _(Optional, default is HTTPS)_: Delivery Controllers XML service transport type. Valid values are: HTTP, HTTPS, SSL. If not specified, defaults to "HTTPS". +- **`[Boolean]` deliverycontrollersloadbalance** _(Optional, default is true)_: Round robin load balance the xml service servers. If not specified, defaults to True. +- **`[String]` xd7farmType** _(Optional `[XenDesktop|XenApp]`, default is XenDesktop)_: The type of Citrix XenDesktop site/farm hosted on the Delivery Controllers to which Storefront will be linked. +- **`[String Array]` storefrontauthmethods** _(Optional, default is `['ExplicitForms','IntegratedWindows']`)_: Storefront user uthentification method. Must be an array with at least one of the following values : `[ 'Certificate', 'CitrixAGBasic', 'CitrixFederation', 'ExplicitForms', 'HttpBasic', 'IntegratedWindows' ]` ~~~puppet @@ -82,59 +92,60 @@ node 'storefront' { baseurl => 'https://storefront.testlab.com/' svc_username => 'TESTLAB\svc-puppet', svc_password => 'P@ssw0rd', - sourcepath => '\\fileserver\xendesktop715', + sourcepath => '\\\\fileserver\xendesktop715', xd7sitename => 'XD7TestSite', - xd7farmType => 'XenDesktop', + xd7farmtype => 'xendesktop', deliverycontrollers => ['srv-cxdc01.testlab.com', 'srv-cxdc02.testlab.com'], - deliveryControllersTransportType => 'HTTPS', - deliveryControllersPort => 443, - deliveryControllersLoadBalance => true, - storefrontAuthMethods => ['IntegratedWindows', 'ExplicitForms'] + deliverycontrollerstransporttype => 'HTTPS', + deliverycontrollersport => 443, + deliverycontrollersloadbalance => true, + storefrontauthmethods => ['IntegratedWindows', 'ExplicitForms'] https => true, - sslCertificateSourcePath => '\\fileserver\ssl\cxdc.pfx', - sslCertificatePassword => 'P@ssw0rd', - sslCertificateThumbprint => '44cce73845feef4da4d369a37386c862eb3bd4e1', - caCertificateSourcePath => '\\fileserver\ssl\ca-root.pem', - caCertificateThumbprint => '48jise7dssdsd4da4d369a3738dsdsdeeb3sdiu3' + sslcertificatesourcepath => '\\\\fileserver\ssl\cxdc.pfx', + sslcertificatepassword => 'P@ssw0rd', + sslcertificatethumbprint => '44cce73845feef4da4d369a37386c862eb3bd4e1', + cacertificatesourcepath => '\\\\fileserver\ssl\ca-root.pem', + cacertificatethumbprint => '48jise7dssdsd4da4d369a3738dsdsdeeb3sdiu3' }-> - + xd7storefront::store{'CustomStore01': - storeName => 'CustomStore01', + storename => 'CustomStore01', xd7sitename => 'XD7TestSite', - xd7farmType => 'XenDesktop', + xd7farmtype => 'XenDesktop', deliverycontrollers => ['srv-cxdc01.testlab.com', 'srv-cxdc02.testlab.com'], - deliveryControllersTransportType => 'HTTPS', - deliveryControllersPort => 443, - deliveryControllersLoadBalance => true, - storefrontAuthMethods => ['IntegratedWindows', 'ExplicitForms'] + deliverycontrollerstransporttype => 'HTTPS', + deliverycontrollersport => 443, + deliverycontrollersloadbalance => true, + storefrontauthmethods => ['IntegratedWindows', 'ExplicitForms'] } - + xd7storefront::store{'CustomStore02': - storeName => 'CustomStore02', + storename => 'CustomStore02', xd7sitename => 'XD7DevelopmentSite', - xd7farmType => 'XenDesktop', + xd7farmtype => 'XenDesktop', deliverycontrollers => ['srv-cxdc03.testlab.com', 'srv-cxdc04.testlab.com'], - deliveryControllersTransportType => 'HTTPS', - deliveryControllersPort => 443, - deliveryControllersLoadBalance => true, - storefrontAuthMethods => ['CitrixFederation'] + deliverycontrollerstransporttype => 'HTTPS', + deliverycontrollersport => 443, + deliverycontrollersloadbalance => true, + storefrontauthmethods => ['CitrixFederation'] } } ~~~ -###Configure netscaler gateway -Puppet type to declare Netscaler Gateway in a Storefront deployment. Can be declared multiple times in a node configuation. -Declaration of a Netscaler Gateway will create an associated external beacon for external access. +### xd7storefront::netscalergateway - Configure netscaler gateway ### +Puppet type to declare a Netscaler Gateway in a Citrix Storefront deployment. Can be declared multiple times in a node configuation. +Declaration of a Netscaler Gateway will create an associated external beacon in Storefront for external access. **In this first version of the xd7storefront module, Netscaler Gateway has to be manually linked to a store to enable external access.** -- **netscaler_external_url** : NetScaler gateway external URL for Storefront access. -- **netscaler_authentication_method** : (String) Login type required and supported by the Gateway. Valid values are: UsedForHDXOnly, Domain, RSA, DomainAndRSA, SMS, GatewayKnows, SmartCard, None. -- **netscaler_smartcardfallbacklogontype** : (String) Login type to use when SmartCard fails. Valid values are: UsedForHDXOnly, Domain, RSA, DomainAndRSA, SMS, GatewayKnows, SmartCard, None. -- **netscaler_callback_url** : NetScaler gateway authentication NetScaler call-back Url. -- **netscaler_snip** : NetScaler subnet IP address used to contact Storefront. -- **sta_urls** : (String Array) Array containing XD7 Secure Ticket Authority server URLs at format ['http://srv-cxdc01.domain.net/scripts/ctxsta.dll', 'http://srv-cxdc02.domain.net/scripts/ctxsta.dll'] +- **`[String]` netscaler_name** _(Required)_: Name of the Netscaler Gateway object which will be registered in Storefront, +- **`[String]` netscaler_external_url** _(Required)_: NetScaler gateway external URL for Storefront access. +- **`[String]` netscaler_authentication_method** _(Required, ValueMap{"UsedForHDXOnly", "Domain", "RSA", "DomainAndRSA", "SMS", "GatewayKnows", "SmartCard", "None"})_: Login type required and supported by the Gateway. Valid values are: UsedForHDXOnly, Domain, RSA, DomainAndRSA, SMS, GatewayKnows, SmartCard, None. +- **`[String]` netscaler_callback_url** _(Required)_: NetScaler gateway authentication NetScaler call-back Url. +- **`[String]` netscaler_snip** _(Required)_: NetScaler subnet IP address used to contact Storefront. +- **`[String Array]` sta_urls** _(Required)_: (String Array) Array containing XD7 Secure Ticket Authority server URLs at format `['http://srv-cxdc01.domain.net/scripts/ctxsta.dll', 'http://srv-cxdc02.domain.net/scripts/ctxsta.dll']` +- **`[String]` netscaler_smartcardfallbacklogontype** _(Optional, default is none)_: Login type to use when SmartCard fails. Valid values are: UsedForHDXOnly, Domain, RSA, DomainAndRSA, SMS, GatewayKnows, SmartCard, None. ~~~puppet @@ -149,4 +160,3 @@ node 'storefront' { } } ~~~ - diff --git a/manifests/config.pp b/manifests/config.pp index 41a2c86..3e27cd0 100644 --- a/manifests/config.pp +++ b/manifests/config.pp @@ -1,85 +1,93 @@ +#Class configuring Citrix Storefront first store class xd7storefront::config inherits xd7storefront { - #Initialize Storefront, deploy Storefront IIS config - dsc_sfcluster{'StorefrontGroup': - dsc_baseurl => $baseurl, - dsc_siteid => 1, - }-> + #Initialize Storefront, deploy Storefront IIS config + dsc_sfcluster{'StorefrontGroup': + dsc_baseurl => $xd7storefront::baseurl, + dsc_siteid => 1, + } - #Create first store - dsc_sfauthenticationservice{ 'DefaultAuthenticationService': + #Create first store +->dsc_sfauthenticationservice{ 'DefaultAuthenticationService': dsc_virtualpath => '/Citrix/Authentication', - }-> + } #Configures authentication methods available on an existing Citrix StoreFront Authentication Service #string Array [ 'Certificate', 'CitrixAGBasic', 'CitrixFederation', 'ExplicitForms', 'HttpBasic', 'IntegratedWindows' ] - dsc_sfauthenticationservicemethod{ 'DefaultStoreAuthenticationMethods': - dsc_virtualpath => '/Citrix/Authentication', - dsc_authenticationmethods => $storefrontAuthMethods, - }-> +->dsc_sfauthenticationservicemethod{ 'DefaultStoreAuthenticationMethods': + dsc_virtualpath => '/Citrix/Authentication', + dsc_authenticationmethods => $xd7storefront::storefrontauthmethods, + } #Exclude CitrixFederation method - dsc_sfauthenticationservicemethod{ 'ExcludeCitrixFederation': - dsc_virtualpath => '/Citrix/Authentication', +->dsc_sfauthenticationservicemethod{ 'ExcludeCitrixFederation': + dsc_virtualpath => '/Citrix/Authentication', dsc_excludeauthenticationmethods => ['CitrixFederation'], - }-> - + } + #Create the store - dsc_sfstore{'DefaultStore': - dsc_friendlyname => 'DefaultStore', - dsc_virtualpath => '/Citrix/Store', +->dsc_sfstore{'DefaultStore': + dsc_friendlyname => 'DefaultStore', + dsc_virtualpath => '/Citrix/Store', dsc_authenticationservicevirtualpath => '/Citrix/Authentication', - }-> + } #Create the Store web interface - dsc_sfstorewebreceiver{ 'DefaultStoreWebReceiver': +->dsc_sfstorewebreceiver{ 'DefaultStoreWebReceiver': dsc_storevirtualpath => '/Citrix/Store', - dsc_virtualpath => '/Citrix/StoreWeb', - require => Dsc_sfstore['DefaultStore'] - }-> - + dsc_virtualpath => '/Citrix/StoreWeb', + require => Dsc_sfstore['DefaultStore'] + } + #Make sure that Storefront web receiver authentication methods are the same than Store authentication methods - dsc_xd7storefrontreceiverauthenticationmethod{ 'XD7StoreFrontReceiverWebAuthenticationMethods': - dsc_virtualpath => '/Citrix/StoreWeb', - dsc_siteid => 1, - dsc_authenticationmethod => $storefrontAuthMethods, - require => Dsc_sfstorewebreceiver['DefaultStoreWebReceiver'] +->dsc_xd7storefrontreceiverauthenticationmethod{ 'XD7StoreFrontReceiverWebAuthenticationMethods': + dsc_virtualpath => '/Citrix/StoreWeb', + dsc_siteid => 1, + dsc_authenticationmethod => $xd7storefront::storefrontauthmethods, + require => Dsc_sfstorewebreceiver['DefaultStoreWebReceiver'] } - - #Link store to XenDesktop site - dsc_sfstorefarm{ 'DefaultStoreFarm': + + #Link store to XenDesktop site +->dsc_sfstorefarm{ 'DefaultStoreFarm': dsc_storevirtualpath => '/Citrix/Store', - dsc_farmname => $xd7sitename, - dsc_farmtype => $xd7farmType, - dsc_servers => $deliverycontrollers, - dsc_transporttype => $deliveryControllersTransportType, - dsc_loadbalance => $deliveryControllersLoadBalance, - #dsc_port => $deliveryControllersPort, - require => Dsc_sfstore['DefaultStore'] + dsc_farmname => $xd7storefront::xd7sitename, + dsc_farmtype => $xd7storefront::xd7farmtype, + dsc_servers => $xd7storefront::deliverycontrollers, + dsc_transporttype => $xd7storefront::deliverycontrollerstransporttype, + dsc_loadbalance => $xd7storefront::deliverycontrollersloadbalance, + dsc_port => $xd7storefront::deliverycontrollersport, + require => Dsc_sfstore['DefaultStore'] } #Disable CRL checking. Causing excepssive delay when storefront logon page is displayed #http://www.carlstalhood.com/storefront-3-5-tweaks/#crl - dsc_script{ 'CitrixBrokerServiceSSL': - dsc_getscript => 'Return @{ Result = $false) }', + dsc_script{ 'DisableCRLChecking': + dsc_getscript => 'Return @{ Result = $false) }', dsc_testscript => 'Return $false', - dsc_setscript => 'Add-PSSnapin Citrix.DeliveryServices.Framework.Commands + dsc_setscript => 'Add-PSSnapin Citrix.DeliveryServices.Framework.Commands Set-DSAssemblyVerification $false' } - #Disable Customer Experience Improvement Program (CEIP) (HKLM:\SOFTWARE\Citrix\Telemetry\CEIP -Name 'Enabled' -Value "0x00000000") and restart CitrixTelemetryService + #Disable Customer Experience Improvement Program (CEIP) + #(HKLM:\SOFTWARE\Citrix\Telemetry\CEIP -Name 'Enabled' -Value "0x00000000") and restart CitrixTelemetryService #http://www.carlstalhood.com/storefront-3-5-basic-configuration/#ceip service{'CitrixTelemetryService': ensure => 'running', enable => true } - + registry_value { 'HKLM\SOFTWARE\Citrix\Telemetry\CEIP': - path =>'HKLM\SOFTWARE\Citrix\Telemetry\CEIP', ensure => present, + path =>'HKLM\SOFTWARE\Citrix\Telemetry\CEIP', type => 'dword', data => '0', notify => Service['CitrixTelemetryService'] } - + + #Redirect from default IIS page to default store + file{'c:/inetpub/wwwroot/index.html': + ensure => file, + content => template('xd7storefront/index.erb'), + require => Dsc_sfstorewebreceiver['DefaultStoreWebReceiver'] + } } diff --git a/manifests/init.pp b/manifests/init.pp index 9fd5786..ecc522b 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -11,23 +11,23 @@ # Sample Usage: # class xd7storefront ( - $baseurl, # http(s)://FQDN of the required Storefront URL. In case of cluster, use cluster URL - $setup_svc_username, - $setup_svc_password, - $sourcepath, - $xd7sitename, - $xd7farmType = "XenDesktop", # XenDesktop or XenApp - $deliverycontrollers, # List of XML servers (FQDN) - $deliveryControllersPort = 443, # XML port - $deliveryControllersTransportType = "HTTPS", # XML transport type - $deliveryControllersLoadBalance = true, - $storefrontAuthMethods = ['ExplicitForms','IntegratedWindows'], - $https = false, - $sslCertificateSourcePath = '', - $sslCertificatePassword = '', - $sslCertificateThumbprint = '', - $caCertificateSourcePath = '', - $caCertificateThumbprint = '' + String $baseurl, # http(s)://FQDN of the required Storefront URL. In case of cluster, use cluster URL + String $setup_svc_username, + String $setup_svc_password, + String $sourcepath, + String $xd7sitename, + Array[String] $deliverycontrollers, # List of XML servers (FQDN) + Optional[Integer] $deliverycontrollersport = 443, + Optional[String] $deliverycontrollerstransporttype = 'https', + Optional[Boolean] $deliverycontrollersloadbalance = true, + Enum['XenDesktop', 'XenApp'] $xd7farmtype = 'XenDesktop', + Array[String] $storefrontauthmethods = ['ExplicitForms','IntegratedWindows'], + Optional[Boolean] $https = false, + Optional[String] $sslcertificatesourcepath = '', + Optional[String] $sslcertificatepassword = '', + Optional[String] $sslcertificatethumbprint = '', + Optional[String] $cacertificatesourcepath = '', + Optional[String] $cacertificatethumbprint = '' ) { @@ -37,13 +37,12 @@ contain xd7storefront::networkconfig contain xd7storefront::sslconfig #contain xd7storefront::service - - Class['::xd7storefront::installwindowsfeatures'] -> - Class['::xd7storefront::installstorefront'] -> - Class['::xd7storefront::config'] -> - Class['::xd7storefront::networkconfig'] -> - Class['::xd7storefront::sslconfig'] - #Class['::xd7storefront::service'] - - + + Class['::xd7storefront::installwindowsfeatures'] +->Class['::xd7storefront::installstorefront'] +->Class['::xd7storefront::config'] +->Class['::xd7storefront::networkconfig'] +->Class['::xd7storefront::sslconfig'] +#->Class['::xd7storefront::service'] + } diff --git a/manifests/installstorefront.pp b/manifests/installstorefront.pp index 5dd0dd8..be9d444 100644 --- a/manifests/installstorefront.pp +++ b/manifests/installstorefront.pp @@ -1,14 +1,13 @@ +#Class installing Citrix Storefront feature class xd7storefront::installstorefront inherits xd7storefront { - - dsc_xd7feature { 'XD7Storefront': - dsc_role => 'Storefront', - dsc_sourcepath => $sourcepath, - dsc_ensure => 'present', - notify => Reboot['after_run'] - } + dsc_xd7feature { 'XD7Storefront': + dsc_role => 'Storefront', + dsc_sourcepath => $xd7storefront::sourcepath, + dsc_ensure => 'present', + notify => Reboot['after_run'] + } - reboot { 'after_run': - apply => finished, - } - -} \ No newline at end of file + reboot { 'after_run': + apply => finished, + } +} diff --git a/manifests/installwindowsfeatures.pp b/manifests/installwindowsfeatures.pp index af62928..90a862b 100644 --- a/manifests/installwindowsfeatures.pp +++ b/manifests/installwindowsfeatures.pp @@ -1,84 +1,84 @@ +#Class installing IIS windows features class xd7storefront::installwindowsfeatures inherits xd7storefront { - - dsc_windowsfeature{'iis': - dsc_ensure => 'Present', - dsc_name => 'Web-Server', - }-> - - dsc_windowsfeature{'Web-Scripting-Tools': - dsc_ensure => 'Present', - dsc_name => 'Web-Scripting-Tools', - }-> - - dsc_windowsfeature{'Web-Mgmt-Console': - dsc_ensure => 'Present', - dsc_name => 'Web-Mgmt-Console', - }-> - - dsc_windowsfeature{'Web-Common-Http': - dsc_ensure => 'Present', - dsc_name => 'Web-Common-Http', - }-> - - dsc_windowsfeature{'Web-Default-Doc': - dsc_ensure => 'Present', - dsc_name => 'Web-Default-Doc', - }-> - - dsc_windowsfeature{'Web-Http-Errors': - dsc_ensure => 'Present', - dsc_name => 'Web-Http-Errors', - }-> - - dsc_windowsfeature{'Web-Static-Content': - dsc_ensure => 'Present', - dsc_name => 'Web-Static-Content', - }-> - - dsc_windowsfeature{'Web-Http-Redirect': - dsc_ensure => 'Present', - dsc_name => 'Web-Http-Redirect', - }-> - - dsc_windowsfeature{'Web-Http-Logging': - dsc_ensure => 'Present', - dsc_name => 'Web-Http-Logging', - }-> - - dsc_windowsfeature{'aspnet45': - dsc_ensure => 'Present', - dsc_name => 'Web-Asp-Net45', - }-> - - dsc_windowsfeature{'NET-Framework-45-ASPNET': - dsc_ensure => 'Present', - dsc_name => 'NET-Framework-45-ASPNET', - }-> - - dsc_windowsfeature{'Web-Basic-Auth': + dsc_windowsfeature{'iis': + dsc_ensure => 'Present', + dsc_name => 'Web-Server', + } + +->dsc_windowsfeature{'Web-Scripting-Tools': + dsc_ensure => 'Present', + dsc_name => 'Web-Scripting-Tools', + } + +->dsc_windowsfeature{'Web-Mgmt-Console': + dsc_ensure => 'Present', + dsc_name => 'Web-Mgmt-Console', + } + +->dsc_windowsfeature{'Web-Common-Http': + dsc_ensure => 'Present', + dsc_name => 'Web-Common-Http', + } + +->dsc_windowsfeature{'Web-Default-Doc': + dsc_ensure => 'Present', + dsc_name => 'Web-Default-Doc', + } + +->dsc_windowsfeature{'Web-Http-Errors': + dsc_ensure => 'Present', + dsc_name => 'Web-Http-Errors', + } + +->dsc_windowsfeature{'Web-Static-Content': + dsc_ensure => 'Present', + dsc_name => 'Web-Static-Content', + } + +->dsc_windowsfeature{'Web-Http-Redirect': + dsc_ensure => 'Present', + dsc_name => 'Web-Http-Redirect', + } + +->dsc_windowsfeature{'Web-Http-Logging': + dsc_ensure => 'Present', + dsc_name => 'Web-Http-Logging', + } + +->dsc_windowsfeature{'aspnet45': + dsc_ensure => 'Present', + dsc_name => 'Web-Asp-Net45', + } + +->dsc_windowsfeature{'NET-Framework-45-ASPNET': + dsc_ensure => 'Present', + dsc_name => 'NET-Framework-45-ASPNET', + } + +->dsc_windowsfeature{'Web-Basic-Auth': dsc_ensure => 'Present', dsc_name => 'Web-Basic-Auth', - }-> - - dsc_windowsfeature{'Web-Windows-Auth': + } + +->dsc_windowsfeature{'Web-Windows-Auth': dsc_ensure => 'Present', dsc_name => 'Web-Windows-Auth', - }-> - - dsc_windowsfeature{'Web-AppInit': + } + +->dsc_windowsfeature{'Web-AppInit': dsc_ensure => 'Present', dsc_name => 'Web-AppInit', } - - if ($osfamily == 'windows') and ($facts['os']['release']['full']== '2012 R2') { - dsc_windowsfeature{'Web-Asp-Net45': - dsc_ensure => 'Present', - dsc_name => 'Web-Asp-Net45', - }-> - - dsc_windowsfeature{'Net-Wcf-Tcp-PortSharing45': - dsc_ensure => 'Present', - dsc_name => 'Net-Wcf-Tcp-PortSharing45', - } - } -} \ No newline at end of file + + if ($facts['osfamily'] == 'windows') and ($facts['os']['release']['full']== '2012 R2') { + dsc_windowsfeature{'Web-Asp-Net45': + dsc_ensure => 'Present', + dsc_name => 'Web-Asp-Net45', + } + + ->dsc_windowsfeature{'Net-Wcf-Tcp-PortSharing45': + dsc_ensure => 'Present', + dsc_name => 'Net-Wcf-Tcp-PortSharing45', + } + } +} diff --git a/manifests/netscalergateway.pp b/manifests/netscalergateway.pp index bfad990..e612bd7 100644 --- a/manifests/netscalergateway.pp +++ b/manifests/netscalergateway.pp @@ -1,25 +1,26 @@ +#Type for Citrix Netscaler Gateway declaration in Citrix Storefront define xd7storefront::netscalergateway ( - $netscaler_name, - $netscaler_external_url = 'http://ext.domain.net', - $netscaler_authentication_method = 'SmartCard', - $netscaler_smartcardfallbacklogontype = 'None', - $netscaler_callback_url = 'http://callback.domain.net', - $netscaler_snip = '192.168.1.200', - $sta_urls = ['http://srv-cxdc01.domain.net/scripts/ctxsta.dll'], + String $netscaler_name, + String $netscaler_external_url, + Enum['UsedForHDXOnly', 'Domain', 'RSA', 'DomainAndRSA', 'SMS', 'GatewayKnows', 'SmartCard', 'None'] $netscaler_authentication_method, + String $netscaler_callback_url, + String $netscaler_snip, + Array[String] $sta_urls, + Optional[String] $netscaler_smartcardfallbacklogontype = 'None', ) -{ +{ dsc_sfgateway{'NetscalerGateway': - dsc_name => $netscaler_name, - dsc_url => $netscaler_external_url, - dsc_logontype => $netscaler_authentication_method, - dsc_callbackurl => $netscaler_callback_url, - dsc_requesttickettwostas => true, - dsc_secureticketauthorityurls => $sta_urls, - dsc_sessionreliability => true, + dsc_name => $netscaler_name, + dsc_url => $netscaler_external_url, + dsc_logontype => $netscaler_authentication_method, + dsc_callbackurl => $netscaler_callback_url, + dsc_requesttickettwostas => true, + dsc_secureticketauthorityurls => $sta_urls, + dsc_sessionreliability => true, dsc_smartcardfallbacklogontype => $netscaler_smartcardfallbacklogontype, #dsc_stasbypassduration => 30, #dsc_stasuseloadbalancing => true, - dsc_subnetipaddress => $netscaler_snip, - dsc_ensure => 'Present' + dsc_subnetipaddress => $netscaler_snip, + dsc_ensure => 'Present' } -} \ No newline at end of file +} diff --git a/manifests/networkconfig.pp b/manifests/networkconfig.pp index 74f06e6..7c2f360 100644 --- a/manifests/networkconfig.pp +++ b/manifests/networkconfig.pp @@ -1,29 +1,31 @@ +#Class configuring Citrix Storefront network parameters and firewall rules class xd7storefront::networkconfig inherits xd7storefront { #Disable NETBIOS. Causing excepssive delay when storefront logon page is displayed #http://www.carlstalhood.com/storefront-3-5-tweaks/#crl - dsc_xnetbios{'DisableNetBIOS': - dsc_interfacealias => 'Ethernet', - dsc_setting => 'Disable' - } - + #Disabled until publication of xNetbios bugfix in puppetlabs/dsc + #dsc_xnetbios{'DisableNetBIOS': + # dsc_interfacealias => $facts['interfaces'], + # dsc_setting => 'Disable' + #} + #Disable IPV6 dsc_xnetadapterbinding{'DisableIPv6': - dsc_interfacealias => 'Ethernet', - dsc_componentid => 'ms_tcpip6', - dsc_state => 'Disabled' + dsc_interfacealias => $facts['interfaces'], + dsc_componentid => 'ms_tcpip6', + dsc_state => 'Disabled' } - + #Firewall rules dsc_xfirewall{'StorefrontHttpFWRule': - dsc_name => 'IIS-WebServerRole-HTTP-In-TCP', - dsc_ensure => 'Present', + dsc_name => 'IIS-WebServerRole-HTTP-In-TCP', + dsc_ensure => 'Present', dsc_enabled => 'True' } - + dsc_xfirewall{'StorefrontHttpsFWRule': - dsc_name => 'IIS-WebServerRole-HTTPS-In-TCP', - dsc_ensure => 'Present', + dsc_name => 'IIS-WebServerRole-HTTPS-In-TCP', + dsc_ensure => 'Present', dsc_enabled => 'True' } - -} \ No newline at end of file + +} diff --git a/manifests/sslconfig.pp b/manifests/sslconfig.pp index 5ffb994..f76ad27 100644 --- a/manifests/sslconfig.pp +++ b/manifests/sslconfig.pp @@ -1,60 +1,53 @@ +#Class configuring Citrix Storefront SSL access class xd7storefront::sslconfig inherits xd7storefront { - if $https { - if ($caCertificateSourcePath != '') { - #Import and install CA certificate in LocalMachine Root store - dsc_file{ 'CACert': - dsc_sourcepath => $caCertificateSourcePath, - dsc_destinationpath => 'c:\SSL\ca.pem', - dsc_type => 'File' - } - - dsc_xcertificateimport{ 'ImportCACert': - dsc_thumbprint => $caCertificateThumbprint, - dsc_path => 'c:\SSL\ca.pem', - dsc_location => 'LocalMachine', - dsc_store => 'Root', - require => Dsc_file['CACert'] - } + if $xd7storefront::https { + if ($xd7storefront::cacertificatesourcepath != '') { + #Import and install CA certificate in LocalMachine Root store + dsc_file{ 'CACert': + dsc_sourcepath => $xd7storefront::cacertificatesourcepath, + dsc_destinationpath => 'c:\SSL\ca.pem', + dsc_type => 'File' + } + + dsc_xcertificateimport{ 'ImportCACert': + dsc_thumbprint => $xd7storefront::cacertificatethumbprint, + dsc_path => 'c:\SSL\ca.pem', + dsc_location => 'LocalMachine', + dsc_store => 'Root', + require => Dsc_file['CACert'] + } } - + #Import and install server certificate dsc_file{ 'SSLCert': - dsc_sourcepath => $sslCertificateSourcePath, + dsc_sourcepath => $xd7storefront::sslcertificatesourcepath, dsc_destinationpath => 'c:\SSL\cert.pfx', - dsc_type => 'File' + dsc_type => 'File' } - + dsc_xpfximport{ 'ImportSSLCert': - dsc_thumbprint => $sslCertificateThumbprint, - dsc_path => 'c:\SSL\cert.pfx', - dsc_location => 'LocalMachine', - dsc_store => 'WebHosting', - dsc_credential => {'user' => 'cert', 'password' => $sslCertificatePassword }, - require => Dsc_file['SSLCert'] + dsc_thumbprint => $xd7storefront::sslcertificatethumbprint, + dsc_path => 'c:\SSL\cert.pfx', + dsc_location => 'LocalMachine', + dsc_store => 'WebHosting', + dsc_credential => {'user' => 'cert', 'password' => $xd7storefront::sslcertificatepassword }, + require => Dsc_file['SSLCert'] } - #---- WARNING ---- - #BREAKS STOREFRONT POWERSHELL SDK AND CONSOLE - #---- WARNING ---- - #dsc_xwebsite{ 'DefaultWebSiteSSL': - # dsc_name => 'Default Web Site', - # dsc_bindinginfo => [ - # { protocol => 'HTTPS', port => '443', certificatethumbprint => $sslCertificateThumbprint, certificatestorename => 'WebHosting' } - # ], - # require => Dsc_xpfximport['ImportSSLCert'] - #} - + dsc_xwebsite{ 'DefaultWebSiteSSL': + dsc_name => 'Default Web Site', + dsc_bindinginfo => [ + { protocol => 'https', + port => '443', + certificatethumbprint => $xd7storefront::sslcertificatethumbprint, + certificatestorename => 'WebHosting' }], + require => Dsc_xpfximport['ImportSSLCert'] + } + } + else { + dsc_xwebsite{ 'DefaultWebSite': + dsc_name => 'Default Web Site', + dsc_bindinginfo => [{ protocol => 'http', port => '80'}], + } } - #else { - #---- WARNING ---- - #BREAKS STOREFRONT POWERSHELL SDK AND CONSOLE - #---- WARNING ---- - # dsc_xwebsite{ 'DefaultWebSite': - # dsc_name => 'Default Web Site', - # #dsc_physicalpath => '%SystemDrive%\inetpub\wwwroot', - # dsc_bindinginfo => [ - # { protocol => 'HTTP', port => '80'} - # ], - # } - #} } diff --git a/manifests/store.pp b/manifests/store.pp index a7a7137..ccd2ef8 100644 --- a/manifests/store.pp +++ b/manifests/store.pp @@ -1,54 +1,54 @@ +#Type for Citrix Storefront store creation define xd7storefront::store ( - $storeName, - $xd7sitename, - $xd7farmType, - $deliverycontrollers, - $deliveryControllersTransportType = 'HTTPS', - $deliveryControllersPort = 443, - $deliveryControllersLoadBalance = true, - $storefrontAuthMethods = ['ExplicitForms','IntegratedWindows'] -) -{ - #Adds an authentication service to Storefront group/cluster. - dsc_sfauthenticationservice{ "${storeName}Auth": - dsc_virtualpath => "/Citrix/${storeName}Auth" - }-> - + String $storename, + String $xd7sitename, + Array[String] $deliverycontrollers, + Optional[String] $deliverycontrollerstransporttype = 'https', + Optional[Integer] $deliverycontrollersport = 443, + Optional[Boolean] $deliverycontrollersloadbalance = true, + Enum['XenDesktop', 'XenApp']$xd7farmtype = 'XenDesktop', + Array[String] $storefrontauthmethods = ['ExplicitForms','IntegratedWindows'] +) +{ + #Adds an authentication service to Storefront group/cluster. + dsc_sfauthenticationservice{ "${storename}Auth": + dsc_virtualpath => "/Citrix/${storename}Auth" + } + #Configures authentication methods available on an existing Citrix StoreFront Authentication Service #string Array [ 'Certificate', 'CitrixAGBasic', 'CitrixFederation', 'ExplicitForms', 'HttpBasic', 'IntegratedWindows' ] - dsc_sfauthenticationservicemethod{ "${storeName}AuthMethod": - dsc_virtualpath => "/Citrix/${storeName}Auth", - dsc_authenticationmethods => $storefrontAuthMethods, - }-> - +->dsc_sfauthenticationservicemethod{ "${storename}AuthMethod": + dsc_virtualpath => "/Citrix/${storename}Auth", + dsc_authenticationmethods => $storefrontauthmethods, + } + #Store creation and mapping to the authentication service - dsc_sfstore{"${storeName}": - dsc_friendlyname => $storeName, - dsc_virtualpath => "/Citrix/${storeName}", - dsc_authenticationservicevirtualpath => "/Citrix/${storeName}Auth" - }-> - +->dsc_sfstore{"${storename}Store": + dsc_friendlyname => $storename, + dsc_virtualpath => "/Citrix/${storename}", + dsc_authenticationservicevirtualpath => "/Citrix/${storename}Auth" + } + #Adds a Web Receiver site to the store. - dsc_sfstorewebreceiver{ "${storeName}Receiver": - dsc_storevirtualpath => "/Citrix/${storeName}", - dsc_virtualpath => "/Citrix/${storeName}Web" - }-> - - dsc_xd7storefrontreceiverauthenticationmethod{ "${storeName}ReceiverWebAuthenticationMethods": - dsc_virtualpath => '/Citrix/StoreWeb', - dsc_siteid => 1, - dsc_authenticationmethod => $storefrontAuthMethods, - }-> - +->dsc_sfstorewebreceiver{ "${storename}Receiver": + dsc_storevirtualpath => "/Citrix/${storename}", + dsc_virtualpath => "/Citrix/${storename}Web" + } + +->dsc_xd7storefrontreceiverauthenticationmethod{ "${storename}ReceiverWebAuthenticationMethods": + dsc_virtualpath => '/Citrix/StoreWeb', + dsc_siteid => 1, + dsc_authenticationmethod => $storefrontauthmethods, + } + #Adds a XenApp/XenDesktop farm/site to the store. - dsc_sfstorefarm{ "${storeName}Farm": - dsc_storevirtualpath => "/Citrix/${storeName}", - dsc_farmname => $xd7sitename, - dsc_farmtype => $xd7farmType, - dsc_servers => $deliverycontrollers, - dsc_transporttype => $deliveryControllersTransportType, - dsc_loadbalance => $deliveryControllersLoadBalance, - #dsc_serviceport => $deliveryControllersPort, +->dsc_sfstorefarm{ "${storename}Farm": + dsc_storevirtualpath => "/Citrix/${storename}", + dsc_farmname => $xd7sitename, + dsc_farmtype => $xd7farmtype, + dsc_servers => $deliverycontrollers, + dsc_transporttype => $deliverycontrollerstransporttype, + dsc_loadbalance => $deliverycontrollersloadbalance, + dsc_port => $deliverycontrollersport, } - } diff --git a/metadata.json b/metadata.json index a55f5d0..9cce6b1 100644 --- a/metadata.json +++ b/metadata.json @@ -1,17 +1,17 @@ { - "author": "citrixdeployment", + "author": "virtualdesktopdevops", "dependencies": [ - { - "name": "puppetlabs/registry", + { + "name": "puppetlabs/registry", "version_requirement": ">= 1.1.4" }, - { - "name": "puppetlabs/dsc", - "version_requirement": ">= 1.4.0" + { + "name": "virtualdesktopdevops/dsc", + "version_requirement": ">= 1.5.0" } ], "license": "Apache-2.0", - "name": "citrixdeployment-xd7storefront", + "name": "virtualdesktopdevops-xd7storefront", "operatingsystem_support": [ { "operatingsystem": "windows", @@ -21,15 +21,16 @@ ] } ], - "project_page": "https://www.citrixdeployment.com", + "project_page": "https://www.virtualdesktopdevops.com", "requirements": [ { "name": "puppet", - "version_requirement": ">= 3.8.0 < 6.0.0" + "version_requirement": ">= 4.0.0 < 6.0.0" } ], - "source": "https://www.citrixdeployment.com", - "summary": "Xendesktop 7.x Storefront installation; store & netscaler gateway creation", + "source": "https://virtualdesktopdevops.github.io/xd7storefront/", + "issues_url": "https://github.com/virtualdesktopdevops/xd7storefront/issues", + "summary": "Citrix Xendesktop 7.x Storefront puppet module. Module including storefront installation and initial configuration as well as puppet types definitions for store & netscaler gateway registration", "tags": [ "powershell", "dsc", @@ -38,4 +39,4 @@ "storefront" ], "version": "1.0.0" -} \ No newline at end of file +} diff --git a/templates/index.erb b/templates/index.erb new file mode 100644 index 0000000..cfa7eea --- /dev/null +++ b/templates/index.erb @@ -0,0 +1,5 @@ + \ No newline at end of file