en-US/about_Lability.help.txt

TOPIC
        about_Lability

SHORT DESCRIPTION

        Lability is a local Hyper-V lab provisioning framework.

LONG DESCRIPTION

        The Lability module enables simple provisioning of local Windows Hyper-V development and testing lab
        environments. The intended purpose is to enable the sharing and collaboration of lab environment
        configurations in a standardised format.

        It uses a declarative document for machine configuration. However, rather than defining configurations in an
        external custom domain-specific language (DSL) document, Lability extends existing PowerShell Desired State
        Configuration (DSC) configuration .psd1 documents with metadata that can be interpreted by the module.

        By using this approach, it allows the use of a single configuration document to describe all properties for
        provisioning Windows-centric development and/or test environments.

        The Lability module will parse the DSC configuration document and provision Hyper-V virtual machines according
        to the metadata contained within. When invoked, Lability will parse a DSC configuration document and
        automagically provision the following resources:

            * Virtual machine disk images
                - Download required evaluation Operating System installation media.
                - Expand Windows Image (WIM) image files into Sysprep'd virtual machine parent disks.
                - Apply required/recommended DSC Windows updates.

            * Virtual networks
                - Create internal and external Hyper-V switches.

            * Virtual machines
                - Connect to the correct virtual switches.
                - Inject DSC resources from the host machine.
                - Inject a dynamically created Unattend.xml file.
                - Inject external ISO, EXE and ZIP resources.
                - Inject the virtual machine's DSC document.
                - Invoke the Local Configuration Manager (LCM) after Sysprep.

DSC CONFIGURATIONS

        An example DSC configuration document might look the following.

            @{
                AllNodes = @(
                    @{
                        NodeName = 'DC1';
                    },
                    @{
                        NodeName = 'APP1';
                    }
                )
                NonNodeData = @{

                }
            }

        This exact same document can be extended with specific properties which the Lability module can interpret.
        NOTE: this is still a valid PowerShell DSC configuration (.psd1) document that can be supplied to an
        existing PowerShell DSC configuration.

            @{
                AllNodes = @(
                    @{
                        NodeName = '*';
                        Lability_SwitchName = 'CORPNET';
                        Lability_Media = '2012R2_x64_Standard_EN_Eval';
                    },
                    @{
                        NodeName = 'DC1';
                        Lability_ProcessorCount = 2;
                    },
                    @{
                        NodeName = 'APP1';
                        Lability_ProcessorCount = 1;
                    }
                )
                NonNodeData = @{
                    Lability = @{
                        Network = @(
                            @{
                                Name = 'CORPNET';
                                Type = 'Internal';
                            }
                        )
                    }
                }
            }

        When Start-LabConfiguration is invoked with the above configuration document, it will:

            * Create an internal Hyper-V virtual switch named 'CORPNET'.
            * Download required Server 2012 R2 Standard Edition evaluation media.
            * Create a Sysprep'd Server 2012 R2 Standard Edition parent VHDX file.
            * Install required/recommended DSC hotfixes.
            * Provision two Hyper-V virtual machines called 'DC1' and 'APP1'.
            * Each VM will be given 2GB RAM (configurable default).
            * 'DC1' will be assigned 2 virtual CPUs.
            * 'APP1' will be assigned 1 virtual CPU.
            * Attach each virtual machine to the 'CORPNET' virtual switch.
            * Create differencing VHDX for each VM.
            * Inject a dynamically created Unattend.xml file into the differencing VHDX.

        For a full list of supported metadata, see about_ConfigurationData.

SETTING UP LABILITY

        Initiating a lab deployment requires a number of prerequisites:

            * The Lability module must be running with administrative credentials
                - Creating virtual machines requires administrative permissions.

            * Installation of the Hyper-V role and PowerShell management cmdlets
                - Lability will take care of the local host configuration.
                - Manually installing the Hyper-V role will remove the need to reboot the host.

        To start the configuration of the Lability host, run the following command at an elevated PowerShell prompt:

            PS C:\> Start-LabHostConfiguration

        If a reboot is required, the module will produce an error. Reboot the host and run the command again.

        For more detailed information about the progress or what the command is doing, you can supply the -Verbose
        switch:

            PS C:\> Start-LabHostConfiguration -Verbose

        If you wish to check the status of the current host, use the `Test-LabHostConfiguration` cmdlet.

CONFIGURING HOST DEFAULT VALUES

        Lability uses numerous defaults for all virtual machines that are created. These default values include the
        location of the parent virtual disk files, the location of differencing virtual disk files and the default
        location searched for PowerShell DSC .mof files etc.

        To view the current host configuration settings, run the following command:

            PS C:\> Get-LabHostDefault

        By default, Lability stores all media and virtual machine disk files on the host's system drive. If any of the
        default values need changing to reflect your particualar environment or configuration, it is recommended that
        you set these default before creating any virtual machines.

        To change any of the default values, use the `Set-LabHostDefault` cmdlet. For example, to set the location of
        all .ISO files to `D:\Lability\ISOs` run the following command:

            PS C:\> Set-LabHostDefault -IsoPath D:\Lability\ISOs

        For more information about setting the host's default values run the following command:

            PS C:\> Get-Help -Name Set-LabHostDefault

CONFIGURING VIRTUAL MACHINE DEFAULT VALUES

        Lability applies numerous default values to a virtual machine if they are not explicitly specified, for example
        the number of processors to assign or the virtual switch to attach the VM to.

        The default values can always be overridden within the PowerShell DSC configuration document (.psd1). There is
        a order of precedence that is applied when evaluating the effective setting. The value is applied to the
        virtual machine in the following order of precedence:

            1. The node's configuration hashtable.
            2. The default/wildcard node's configuration hashtable.
            3. The LabVMDefaults value.

        To view the current virtual machine default settings, run the following command:

            PS C:\> Get-LabVMDefault

        To change any of the default values, use the following command:

            PS C:\> Set-LabVMDefault

        For more information about setting the virtual machines' default values run the following command:

            PS C:\> Get-Help -Name Set-LabVMDefault

RUNNING LABILITY

        Once the Lability host is configured, the host default values and the virtual machine defaults set, you can
        initiate a lab deployment. In order to successfully deploy a lab, you will need to following prerequisites in
        place:

            * A PowerShell DSC configuration (.ps1) file and an associated PowerShell DSC configuration (.psd1)
               document.
                - The configuration document (.psd1) should be annotated with the Lability metadata to ensure that the
                  correct settings will be applied to each virtual machine.
                - If an option is not defined on a node within the configuration (.psd1) document, the Lability VM
                  default value will be used.

            * Have already run the required PowerShell DSC configuration on the Lability host.
                - The configuration (.ps1) file must have already been run successfully and generated the required
                  .mof files.
                - This will ensure that all the .mof files are available locally.
                - This also ensures that all the PowerShell DSC resources are located on the host.
                - The .mof files will be injected into the relevant VM during creation.

        After you have confirmed that all the prerequisites are in place, you can invoke the lab deployment using the
        `Start-LabConfiguration` cmdlet.

            PS C:\> Start-LabConfiguration -ConfigurationData .\MyLab.psd1 -Path .\MyMofFiles `
                     -Credential (Get-Credential Administrator)

        This will apply the configuration defined in the `MyLab.psd1` configuration file and a virtual machine created
        for each node defined. The `MyMofFiles` directory will be searched for the corresponding .mof files.

        NOTE: IF ANY .MOF FILES CANNOT BE LOCATED, AN ERROR WILL BE SHOWN AND THE CONFIGURATION ABORTED.

        Once all prerequisite checks have passed, Lability will perform the following actions for each node within the
        configuration (.psd1) document:

            * Create a virtual machine
                - Any values specified will be used, e.g. Media (Operating System).
                - If a value is not specified, the Lability VM defult value will be used.

            * Create the VM's differencing VHD(X) file:
                - If the master VHD(X) file has not been created, Lability will dynamically create it.
                - If the required media (.ISO) file is not available, Lability will attempt to download it.

            * Inject required resources into the VM's VHD(X) file:
                - Copy all local PowerShell DSC resources.
                - Copy the VM's .mof and .meta.mof file(s).
                - Copy the Lability certificate and bootstrap files.
                - Copy a unattend.xml file that will configure the virtual machine as required and invoke the DSC
                  configuration after the Sysprep process has completed.
                    - The local Administrator password will be set to the value supplied
                      via the `Credential` parameter.

        For more information on Operating System media and custom resources see the following help topics:

            PS C:\> Get-Help -Name Start-LabConfiguration
            PS C:\> Get-Help -Name Media
            PS C:\> Get-Help -Name CustomResources

CONTRIBUTE

        Lability is open source on GitHub:

        https://github.com/VirtualEngine/Lability

        As you run Lability and find what you believe to be are bugs, please submit them to:

        https://github.com/VirtualEngine/Lability/issues

        Better yet, fix the bug and submit a pull request.

SEE ALSO
        Start-LabConfiguration
        about_ConfigurationData
        about_Bootstrap
        about_Media
        about_CustomResources