####
# Class:       intapp iis
# Description: Installing IIS Windows Feature and all other necessary features and create Default Web Site
# Customer:    Freshfields Bruckhaus Deringer
# Author:      WM Promus
# Date:        April 2018
###

class demo::iis_prereqs (

) {

  include chocolatey

  package { 'powershell':
    ensure   => installed,
    provider => chocolatey,
  }

  dsc_windowsfeature { 'IIS':
    dsc_ensure => 'present',
    dsc_name   => 'Web-Server',
    #require    => Package['powershell'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'IIS7 - Mgmt Scripts':
    dsc_ensure => 'present',
    dsc_name   => 'Web-Scripting-Tools',
    require    => Dsc_windowsfeature['IIS'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'IIS7 - Mgmt Service':
    dsc_ensure => 'present',
    dsc_name   => 'Web-Mgmt-Service',
    require    => Dsc_windowsfeature['IIS'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'MSMQ':
    dsc_ensure => 'present',
    dsc_name   => 'MSMQ',
    require    => Dsc_windowsfeature['IIS'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'NET Framework 4.5':
    dsc_ensure => 'present',
    dsc_name   => 'Web-Asp-Net45',
    require    => Dsc_windowsfeature['IIS'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'NET Framework 4.5 Web Services':
    dsc_ensure => 'present',
    dsc_name   => 'NET-WCF-Services45',
    require    => Dsc_windowsfeature['NET Framework 4.5'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'NET Framework 4.5 Web Services - ASP':
    dsc_ensure => 'present',
    dsc_name   => 'Web-ASP',
    require    => Dsc_windowsfeature['NET Framework 4.5 Web Services'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'NET Framework 4.5 Web Services - ASP .NET 3.5':
    dsc_ensure => 'present',
    dsc_name   => 'Web-Asp-Net',
    require    => Dsc_windowsfeature['NET Framework 4.5 Web Services'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'Web-Windows-Auth':
    dsc_ensure => 'present',
    dsc_name   => 'Web-Windows-Auth',
    require    => Dsc_windowsfeature['IIS'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'IIS Management - Console':
    dsc_ensure => 'present',
    dsc_name   => 'Web-Mgmt-Console',
    require    => Dsc_windowsfeature['IIS'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'NET Framework 3.5':
    dsc_ensure => 'present',
    dsc_name   => 'NET-Framework-Features',
    require    => Dsc_windowsfeature['IIS'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'NET Framework 3.5 - Core':
    dsc_ensure => 'present',
    dsc_name   => 'NET-Framework-Core',
    require    => Dsc_windowsfeature['NET Framework 3.5'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'NET Framework 3.5 - HTTP Activation':
    dsc_ensure => 'present',
    dsc_name   => 'NET-HTTP-Activation',
    require    => Dsc_windowsfeature['NET Framework 3.5 - Core'],
    notify     => Reboot['reboot_iis'],
  }
#############################################################################
  dsc_windowsfeature { '.NET Framework 4.5':
    dsc_ensure => 'present',
    dsc_name   => 'AS-NET-Framework',
    #require    => Package['powershell'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'Web Server (IIS) Support':
    dsc_ensure => 'present',
    dsc_name   => 'AS-Web-Support',
    #require    => Package['powershell'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'HTTP Activation':
    dsc_ensure => 'present',
    dsc_name   => 'AS-HTTP-Activation',
    require    => Dsc_windowsfeature['Web Server (IIS) Support'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'Storage Services':
    dsc_ensure => 'present',
    dsc_name   => 'Storage-Services',
    require    => Dsc_windowsfeature['Web Server (IIS) Support'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { '.NET Framework 4.5 Core':
    dsc_ensure => 'present',
    dsc_name   => 'NET-Framework-45-Core',
    require    => Dsc_windowsfeature['Web Server (IIS) Support'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'ASP .NET 4.5':
    dsc_ensure => 'present',
    dsc_name   => 'NET-Framework-45-ASPNET',
    require    => Dsc_windowsfeature['Web Server (IIS) Support'],
    notify     => Reboot['reboot_iis'],
  }

#dsc_windowsfeature { 'NET WCF HTTP Activation':
#  dsc_ensure => 'present',
#  dsc_name   => 'NET-WCF-HTTP-Activation',
#  require    => Dsc_windowsfeature['Web Server (IIS) Support'],
#  notify     => Reboot['reboot_iis'],
#}

#dsc_windowsfeature { 'TCP Port Sharing':
#  dsc_ensure => 'present',
#  dsc_name   => 'NET-WCF-TCP-PortSharing',
#  require    => Dsc_windowsfeature['Web Server (IIS) Support'],
#  notify     => Reboot['reboot_iis'],
#}

  dsc_windowsfeature { 'Ink and Handwriting Services':
    dsc_ensure => 'present',
    dsc_name   => 'InkAndHandwritingServices',
    require    => Dsc_windowsfeature['Web Server (IIS) Support'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'Media Foundation':
    dsc_ensure => 'present',
    dsc_name   => 'Server-Media-Foundation',
    require    => Dsc_windowsfeature['Web Server (IIS) Support'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'SMB 1.0/CIFS File Sharing Support':
    dsc_ensure => 'present',
    dsc_name   => 'FS-SMB1',
    require    => Dsc_windowsfeature['Web Server (IIS) Support'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'Telnet Client':
    dsc_ensure => 'present',
    dsc_name   => 'Telnet-Client',
    require    => Dsc_windowsfeature['Web Server (IIS) Support'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'User Interfaces and Infrastructure':
    dsc_ensure => 'present',
    dsc_name   => 'User-Interfaces-Infra',
    require    => Dsc_windowsfeature['Web Server (IIS) Support'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'Windows Powershell ISE':
    dsc_ensure => 'present',
    dsc_name   => 'PowerShell-ISE',
    require    => Dsc_windowsfeature['Web Server (IIS) Support'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'Process Model':
    dsc_ensure => 'present',
    dsc_name   => 'WAS-Process-Model',
    require    => Dsc_windowsfeature['Web Server (IIS) Support'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'Configuration APIs':
    dsc_ensure => 'present',
    dsc_name   => 'WAS-Config-APIs',
    require    => Dsc_windowsfeature['Web Server (IIS) Support'],
    notify     => Reboot['reboot_iis'],
  }

  dsc_windowsfeature { 'WoW64 Support':
    dsc_ensure => 'present',
    dsc_name   => 'WoW64-Support',
    require    => Dsc_windowsfeature['Web Server (IIS) Support'],
    notify     => Reboot['reboot_iis'],
  }

  reboot { 'reboot_iis':
    when    => refreshed,
    timeout => 15,
  }

}