blob: e6f8af0916ef210787b261a5d3afa11bc7a0cf63 [file] [log] [blame] [view]
---
title: WinRM4j Troubleshooting
layout: website-normal
---
Note: in addition to the Windows-specific points here,
much of the [operations troubleshooting guide](/guide/ops/troubleshooting) is applicable for Windows blueprints.
### WinRM Basics
If you can't get WinRM to work at all, see the notes on [the Winrm4j client](client.md) which includes detailed troubleshooting
for basic connectivity.
### User metadata service requirement
WinRM requires activation and configuration before it will work in a standard Windows Server deployment. To automate
this, Brooklyn will place a setup script in the user metadata blob. Services such as Amazon EC2's `Ec2ConfigService`
will automatically load and execute this script. If your chosen cloud provider does not support `Ec2ConfigService` or
a similar package, or if your cloud provider does not support user metadata, then you must pre-configure a Windows image
with the required WinRM setup and make Brooklyn use this image.
If the configuration options `userMetadata` or `userMetadataString` are used on the location, then this will override
the default setup script. This allows one to supply a custom setup script. However, if userMetadata contains something
else then the setup will not be done and the VM may not not be accessible remotely over WinRM.
### Credentials and privileges requiring special configuration
When a script is run over WinRM over HTTP, the credentials under which the script are run are marked as
'remote' credentials, which are prohibited from running certain security-related operations. This may prevent certain
operations. The installer from Microsoft SQL Server is known to fail in this case, for example. For a workaround, please
refer to [How and Why to re-authenticate withing a PowerShell script](tips.md#how-and-why-to-re-authenticate-within-a-powershell-script)
above.
In some cases where security-related operation are to be executed, it may require the use of `CredSSP` to obtain
the correct Administrator privileges: you may otherwise get an access denied error. See the sub-section
[How and Why to re-authenticate within a powershell script](tips.md#how-and-why-to-re-authenticate-within-a-powershell-script) for more details.
### WebServiceException: Could not send Message
We detected a `WebServiceException` and different `SocketException`
during deployment of long-lasting Application Blueprint against VcloudDirector.
Launching the blueprint below was giving constantly this type of error on launch step.
services:
type: org.apache.brooklyn.entity.software.base.VanillaWindowsProcess
brooklyn.config:
pre.install.command: echo preInstallCommand
install.command: echo installCommand > C:\\install.txt
post.install.command: echo postInstallCommand
customize.command: echo customizeCommand
pre.launch.command: echo preLaunchCommand
launch.powershell.command: |
Start-Sleep -s 400
Write-Host Test Completed
post.launch.command: echo postLaunchCommand
checkRunning.command: echo checkRunningCommand
stop.command: echo stopCommand
With series of tests we concluded that on the Vcloud Director environment we were using
a restart was happening about 2 minutes after the VM is provisioned.
Logging in the host and search for System event of type 1074 in Windows Event Viewer, we found two 1074 events where the second one was
The process C:\Windows\system32\winlogon.exe (W2K12-STD) has initiated the restart of computer WIN-XXXX on behalf of user
NT AUTHORITY\SYSTEM for the following reason: Operating System: Upgrade (Planned) Reason Code: 0x80020003 Shutdown Type: restart Comment:
Normally on other clouds only one restart event is registered and the first time WinRM connection is made the Windows VM is ready for use.
For this particular case when you want this second restart to finish we made `waitWindowsToStart` location parameter
which basically adds additional check assuring the Windows VM provisioning is done.
For example when using `waitWindowsToStart: 5m` location parameter, Apache Brooklyn will wait 5 minutes to see if a disconnect occurs.
If it does, then it will again wait 5m for the machine to come back up.
The default behaviour in Apache Brooklyn is to consider provisioning done on the first successful WinRM connection, without waiting for restart.
To determine whether you should use this parameter you should carefully inspect how the image you choose to provision is behaving.
If the description above matches your case and you are getting **connection failure message in the middle of the installation process** for your blueprints,
a restart probably occurred and you should try this parameter.
Before using this parameter we advice to check whether this is really your case.
### AMIs not found
If using the imageId of a Windows community AMI, you may find that the AMI is deleted after a few weeks.
### VM Provisioning Times Out
In some environments, provisioning of Windows VMs can take a very long time to return a usable VM.
If the image is old, it may install many security updates (and reboot several times) before it is
usable.
On a VMware vCloud Director environment, the guest customizations can cause the VM to reboot (sometimes
several times) before the VM is usable.
This could cause the WinRM connection attempts to timeout. The location configuration option
`waitForWinRmAvailable` defaults to `30m` (i.e. 30 minutes). This can be increased if required.
Incorrectly prepared Windows templates can cause the deployment to time-out expecting an interaction by the user.
You can verify if this is the case by RDPing to the in-progress deployment.
It is recommended that any new Windows template be tested with a manually deployment to verify that it can be
used for unattended installations and it doesn't wait and/or require an input by the user.
See [Windows template settings for an Unattended Installation](limitations.md#windows-template-settings-for-an-unattended-installation) under Known Limitations below.
### Windows log files
Details of the commands executed, and their results, can be found in the Brooklyn log and in the Brooklyn
web-console's activity view.
There will also be log files on the Windows Server. System errors in Windows are usually reported in the Windows Event Log -
see [https://technet.microsoft.com/en-us/library/cc766042.aspx](https://technet.microsoft.com/en-us/library/cc766042.aspx)
for more information.
Additional logs may be created by some Windows programs. For example, MSSQL creates a log in
`%programfiles%\Microsoft SQL Server\130\Setup Bootstrap\Log\` - for more information see
[https://msdn.microsoft.com/en-us/library/ms143702.aspx](https://msdn.microsoft.com/en-us/library/ms143702.aspx).
### WinRM Commands Fail on Java Version 8u161
As described in bug [BROOKLYN-592](https://issues.apache.org/jira/browse/BROOKLYN-592),
WinRM commands in an entity fail for certain versions of Java 8 (from 8u161, fixed in 8u192).
This is caused by the Java bug [JDK-8196491](https://bugs.openjdk.java.net/browse/JDK-8196491).
The error within Brooklyn will look like:
```
org.apache.brooklyn.util.core.internal.winrm.WinRmException: (Administrator@52.87.226.190:5985) : failed to execute command: SOAPFaultException: Marshalling Error: Entity References are not allowed in SOAP documents
at org.apache.brooklyn.util.core.internal.winrm.winrm4j.Winrm4jTool.propagate(Winrm4jTool.java:257)
at org.apache.brooklyn.util.core.internal.winrm.winrm4j.Winrm4jTool.exec(Winrm4jTool.java:214)
at org.apache.brooklyn.util.core.internal.winrm.winrm4j.Winrm4jTool.executeCommand(Winrm4jTool.java:117)
...
Caused by: java.lang.UnsupportedOperationException: Entity References are not allowed in SOAP documents
at com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl.createEntityReference(SOAPDocumentImpl.java:148)
...
```
The workaround is to downgrade Java to 8u151 or similar, or upgrade to 8u192 or later.