Node cannot pull configurations

This topic contains 6 replies, has 2 voices, and was last updated by Profile photo of Bjørn Roalkvam Bjørn Roalkvam 1 month, 3 weeks ago.

Viewing 7 posts - 1 through 7 (of 7 total)
  • Author
    Posts
  • #49156
    Profile photo of Bjørn Roalkvam
    Bjørn Roalkvam
    Participant

    Hi
    I have what i think is a working pull server on as MS server 2012R2 with WMF 5 installed. The node is also running MS server 2012R2 with WMF 5.

    I can access the Pull Server's site (XML) without issues on both the Pull Server (vm01) and the node (vm08) which i want to pull configurations.
    Setup is based on the https://msdn.microsoft.com/en-us/powershell/dsc/pullserver :

    PULL SERVER:

    $ConfigurationData = @{
       AllNodes = @(
            @{
                NodeName="*"
                PSDscAllowPlainTextPassword=$true
                PSDscAllowDomainUser = $true
             }
            @{
                NodeName='localhost'
             }
        )
    }
    
    
    
    #https://msdn.microsoft.com/en-us/powershell/dsc/pullserver
    configuration DeployDscPullServer
    { 
        param  
        ( 
                [string[]]$NodeName = 'Present', 
                [ValidateNotNullOrEmpty()] [string] $certificateThumbPrint,
                [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string] $RegistrationKey 
         ) 
    
         Import-DSCResource -ModuleName xPSDesiredStateConfiguration 
         Import-DscResource –ModuleName PSDesiredStateConfiguration
    
    
    
         Node $AllNodes.NodeName 
         { 
             WindowsFeature DSCServiceFeature 
             { 
                 Ensure = 'Present'
                 Name   = 'DSC-Service'             
             } 
    
             WindowsFeature IISMgmtConsole
             { 
                 Ensure = 'Present'
                 Name   = 'Web-Mgmt-Console'             
             } 
    
             xDscWebService PSDSCPullServer 
             { 
                 Ensure                  = 'Present' 
                 EndpointName            = 'PSDSCPullServer' 
                 Port                    = 8080 
                 PhysicalPath            = "$env:SystemDrive\inetpub\PSDSCPullServer" 
                 CertificateThumbPrint   = $certificateThumbPrint          
                 ModulePath              = "$env:PROGRAMFILES\WindowsPowerShell\DscService\Modules" 
                 ConfigurationPath       = "$env:PROGRAMFILES\WindowsPowerShell\DscService\Configuration" 
                 State                   = 'Started'
                 DependsOn               = '[WindowsFeature]DSCServiceFeature'                         
             } 
    
            File RegistrationKeyFile
            {
                Ensure          = 'Present'
                Type            = 'File'
                DestinationPath = "$env:ProgramFiles\WindowsPowerShell\DscService\RegistrationKeys.txt"
                Contents        = $RegistrationKey
            }
        }
    }
    
    
    
    
    #RUN CONFIGURATION
    $MofConfigFile = DeployDscPullServer -ConfigurationData $configurationData -certificateThumbPrint $Thumbprint -RegistrationKey $RegKey -OutputPath c:\Configs\PullServer 
    
    # This creates a MOF at:
    $MofConfigDirectory = $MofConfigFile.DirectoryName
    
    #RUN MOF
    Start-DscConfiguration -Path $MofConfigDirectory -Wait -verbose -force 

    CONFIGURATION:
    I made a simple first file configuration for testing purpose. It runs fine on the node (vm08) when running locally. But i am not able to make the node pull it from the pull server. For testing purpose, I'm not using the certificate encryption.

    $ConfigurationData = @{
        AllNodes = @(
            @{
                NodeName="*"
                PSDscAllowPlainTextPassword=$true
                PSDscAllowDomainUser = $true
             }
            @{
                NodeName="vm08"
                #CertificateFile = 'C:\Keys\SqlNode.cer'
                #Thumbprint = '42235A417BE23ADDE72F1593BDE665106262CF7C'
             }
        )
    }
    
    
    
    Configuration copytest
    {
    Import-DscResource –ModuleName PSDesiredStateConfiguration
    
        Node $AllNodes.NodeName     
        {     
            File test
            {
                DestinationPath = 'c:\here\ok.ps1'
                Ensure = 'Present'
                Recurse = $true
                SourcePath = 'c:\ok.ps1'
                Type =  'File'
            }
        }
    
    }
    
    copytest -ConfigurationData $ConfigurationData -OutputPath C:\Configs\TargetNodes
    
    Remove-item 'C:\Program Files\WindowsPowerShell\DscService\Configuration\*'
    
    copy 'C:\Configs\TargetNodes\vm08.mof' 'C:\Program Files\WindowsPowerShell\DscService\Configuration'
    
    New-DSCCheckSum -path "C:\Program Files\WindowsPowerShell\DscService\Configuration\"
    
    #TEST pull using the https://gist.github.com/JamesDawson/6787277 - Invoke-PullonNode.ps1 
    cd '\\share\testing'
    .\Invoke-PullonNode.ps1 -computername 'vm08'
    cd C:\windows\System32 

    LCM on node (vm08):

    ActionAfterReboot              : ContinueConfiguration
    AgentId                        : A3E37E75-48E0-11E6-80D9-005056837311
    AllowModuleOverWrite           : False
    CertificateID                  : 42235A417BE23ADDE72F1593BDE665106262CF7C
    ConfigurationDownloadManagers  : {[ConfigurationRepositoryWeb]PullSrv}
    ConfigurationID                : 
    ConfigurationMode              : ApplyAndAutoCorrect
    ConfigurationModeFrequencyMins : 15
    Credential                     : 
    DebugMode                      : {NONE}
    DownloadManagerCustomData      : 
    DownloadManagerName            : 
    LCMCompatibleVersions          : {1.0, 2.0}
    LCMState                       : Idle
    LCMStateDetail                 : 
    LCMVersion                     : 2.0
    StatusRetentionTimeInDays      : 10
    PartialConfigurations          : 
    RebootNodeIfNeeded             : True
    RefreshFrequencyMins           : 30
    RefreshMode                    : Pull
    ReportManagers                 : {[ReportServerWeb]PullSrv}
    ResourceModuleManagers         : {[ResourceRepositoryWeb]PullSrv}
    PSComputerName 

    Get-DscConfiguraion on node:
    When i try to get-dscconfiguration on the node (vm08) i just get:

    PS C:\WINDOWS\system32> Get-DscConfiguration
    Get-DscConfiguration : Current configuration does not exist. Execute Start-DscConfiguration command with -Path parameter to specify a configuration file and create a current configuration 
    first.
    At line:1 char:1
    + Get-DscConfiguration
    + ~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (MSFT_DSCLocalConfigurationManager:root/Microsoft/...gurationManager) [Get-DscConfiguration], CimException
        + FullyQualifiedErrorId : MI RESULT 1,Get-DscConfiguration

    Any tips are welcome!
    brgs.
    BJørn

    #49182

    There are two ways to pull a configuration
    1) Let the DSC engine do it for you when the Pull timer kicks in
    2) You can trigger a pull by doing an Update-DscConfiguration from the node where the LCM is.

    Get-DscConfiguration is used for getting the current state of the machine once a configuration has been applied.

    #49225
    Profile photo of Bjørn Roalkvam
    Bjørn Roalkvam
    Participant

    Hi Induh
    Thank you for the reply.

    When running update-dscConfiguration on the node (vm08) I get:

    PS C:\Windows\system32> Update-DscConfiguration
    
    Id     Name            PSJobTypeName   State         HasMoreData     Location             Command                  
    --     ----            -------------   -----         -----------     --------             -------                  
    114    Job114          Configuratio... Running       True            localhost            Update-DscConfiguration  
    
    
    
    PS C:\Windows\system32> Get-DscConfiguration
    Get-DscConfiguration : Current configuration does not exist. Execute Start-DscConfiguration command with -Path parameter to specify a configuration file and create a current configuration first.
    At line:1 char:1
    + Get-DscConfiguration
    + ~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (MSFT_DSCLocalConfigurationManager:root/Microsoft/...gurationManager) [Get-DscConfiguration], CimException
        + FullyQualifiedErrorId : MI RESULT 1,Get-DscConfiguration
    
    
    PS C:\Windows\system32> Get-DscConfigurationStatus
    
    Status     StartDate                 Type            Mode  RebootRequested      NumberOfResources             
    ------     ---------                 ----            ----  ---------------      -----------------             
    Failure    04.08.2016 09:15:04       Initial         Pull  False  

    Node cant seem to get hold of the configuration that is on the pull server.

    brgs

    Bjørn

    #49229
    Profile photo of Bjørn Roalkvam
    Bjørn Roalkvam
    Participant

    This is how i set the LCM on my node remotely from my workstation:

    $PullServer = 'vm01'
    $node = 'vm08'
    $RegkeyFromLocation = 'e6998480-49a3-4134-8a05-b1f59f42be20'
    $NodeThumbprint = '42235A417BE23ADDE72F1593BDE665106262CF7C'
    $cred = Get-Credential contoso\accountA
    
    #---------------------------------
    #CONFIGURE LCM
    #---------------------------------
    #Bruker registrationkey fra over.
    [DSCLocalConfigurationManager()]
    configuration PullClientConfigID
    {
            param (
            [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [array] $NodeName,
            [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [string] $PullServer,
            [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [string] $NodeThumbprint,
            [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [string] $RegistrationKey
        )
    
        Node $NodeName
        {
            Settings
            {
                RefreshMode          = 'Pull'
                RefreshFrequencyMins = 30 
                RebootNodeIfNeeded   = $true
                #AllowModuleOverwrite = $true
                ConfigurationMode = "ApplyAndAutocorrect"
                CertificateID = $NodeThumbprint
    
            }
    
            ConfigurationRepositoryWeb PullSrv
            {
                ServerURL          = "https://$PullServer"+":8080/PSDSCPullServer.svc"
                RegistrationKey    = $RegkeyFromLocation
    
                #Velg en konfigurasjon du vil noden skal kjøre igang
                ConfigurationNames = @("copytest")
            }   
    
            ReportServerWeb PullSrv
            {
                ServerURL       = "https://$PullServer"+":8080/PSDSCPullServer.svc"
                RegistrationKey = $RegkeyFromLocation
            }
    
            ResourceRepositoryWeb PullSrv
            {
                ServerURL = "https://$PullServer"+":8080/PSDSCPullServer.svc"
                RegistrationKey = $RegkeyFromLocation
            }
    
        }
    }
    
    
    
    
    
    #Create mof-meta
    PullClientConfigID -OutputPath c:\Configs\TargetNodes -NodeName $node -PullServer $PullServer -Thumbprint $NodeThumbprint -RegistrationKey $RegkeyFromLocation
    
    New-DscChecksum -path c:\Configs\TargetNodes
    
    #Remote deploy from workstation:
    Write-Host "Starting CimSession"
    
    $cim = New-CimSession -ComputerName $node -Credential $cred
    
    Write-Host "Writing config"
    Set-DscLocalConfigurationManager -CimSession $cim -Path c:\Configs\TargetNodes -Verbose 
    #49231
    Profile photo of Bjørn Roalkvam
    Bjørn Roalkvam
    Participant

    Hmm, trying to set the lcm locally with verbose and wait parameters on the node it actually gives me:

    PS C:\Windows\system32> Update-DscConfiguration -Wait -verbose
    VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' = PerformRequiredConfigurationChecks,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' = root/Microsoft/Windows/DesiredStateConfiguratio
    n'.
    VERBOSE: An LCM method call arrived from computer vm08 with user sid S-1-5-21-195968190-741174349-770780043-93293.
    VERBOSE: [vm08]:                            [] Executing Get-Action with configuration 's checksum: .
    VERBOSE: [vm08]:                            [] Executing Get-Action with configuration 's checksum failed. Please check the availability of pull server.
    The attempt to get the action from server https://vm01:8080///PSDSCPullServer.svc/Nodes(AgentId='A3E37E75-48E0-11E6-80D9-005056837311')/GetDscAction failed because pullserver is not available or there is no  registered node wi
    th AgentId A3E37E75-48E0-11E6-80D9-005056837311 on the server.
        + CategoryInfo          : ResourceUnavailable: (root/Microsoft/...gurationManager:String) [], CimException
        + FullyQualifiedErrorId : WebDownloadManagerGetActionNodeConfigurationNotFound,Microsoft.PowerShell.DesiredStateConfiguration.Commands.GetDscActionCommand
        + PSComputerName        : localhost
    
    VERBOSE: Operation 'Invoke CimMethod' complete.
    VERBOSE: Time taken for configuration job to complete is 2.205 seconds
    
    PS C:\Windows\system32>  
    #49244
    Profile photo of Bjørn Roalkvam
    Bjørn Roalkvam
    Participant

    I see this guy has the same issue as me, unresolved.
    https://www.reddit.com/r/PowerShell/comments/4gvjye/issue_registering_new_dsc_node_to_pull_server/

    #49265
    Profile photo of Bjørn Roalkvam
    Bjørn Roalkvam
    Participant

    So I figured out what I was doing wrong. When compiling the file configuration, the mof file was named after the node (wm08.mof). I simply changed the name to the name of my configuration (copytest.mof), created a new dscChecksum and put these files in the dsc configuration path on the pull server. voila. works perfectly.

    brgs

    Bjørn Roalkvam

Viewing 7 posts - 1 through 7 (of 7 total)

You must be logged in to reply to this topic.