Powershell Script not working when using PLaybook

218 views
Skip to first unread message

Mark Matthews

unread,
Feb 24, 2016, 9:04:42 AM2/24/16
to Ansible Project
Hi

I hae a playbook that runs a powershell script to configure an Octopus Deploy Tentacle.

If I run this powershell script on the server it works perfectly. If I run playbook with the powershell script it fails on the server.

What could possibly be causing this? Permissions? Timing out?


Playbook:
---
- name: Configure Octopus Deploy Tentecle
  hosts: all
  tasks:
    - name: Configure Octopus Deploy Tentecle
      script: files/octo_autoconfig.ps1


Powershell script:

& "C:\Program Files\Octopus Deploy\Tentacle\Tentacle.exe" create-instance --instance "Tentacle" --config "C:\Octopus\Tentacle.config" --console;
& "C:\Program Files\Octopus Deploy\Tentacle\Tentacle.exe" new-certificate --instance "Tentacle" --if-blank --console;
& "C:\Program Files\Octopus Deploy\Tentacle\Tentacle.exe" configure --instance "Tentacle" --reset-trust --console;
& "C:\Program Files\Octopus Deploy\Tentacle\Tentacle.exe" configure --instance "Tentacle" --home "C:\Octopus" --app "C:\Octopus\Applications" --port "10933" --noListen "False" --console;
& "C:\Program Files\Octopus Deploy\Tentacle\Tentacle.exe" configure --instance "Tentacle" --trust "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" --console;
& "C:\Program Files\Octopus Deploy\Tentacle\Tentacle.exe" service --instance "Tentacle" --install --start --console;

Error I get when I try open Octopus Tenticle after running the playbook to config Octopus:

System.NullReferenceException: Object reference not set to an instance of an object.
   at Octopus.Tools.TentacleConfiguration.TentacleManager.TentacleManagerModel.Reload(ApplicationInstanceRecord applicationInstance) in y:\work\refs\heads\master\source\Octopus.Tools\TentacleConfiguration\TentacleManager\TentacleManagerModel.cs:line 131
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)


Note that if I run the Powershell script directly on the server it works perfectly and configures the tentacle. If I then remove the tentacle and then run the playbook it works. So its as if the tenticle needs to be configured first directly on the server before an Ansible playbook can work. Which kind of defeats the point.

Im thinking that Ansible is deleting the powershell script from the temp directly it saves it to before the script is finishing running? Is that possible?
Is there a way of telling Ansible to wait until everything is completed in the script before it moves on or removes the temp file?


Any help would be appreciated.


Cheers
Mark

J Hawkesworth

unread,
Feb 24, 2016, 10:23:29 AM2/24/16
to Ansible Project

Have you checked the event viewer on the remote windows machine?

I haven't used Octopus Deploy / Tentacle so don't know if it is attempting any operations on remote machines during its installation.  If so its possible you are hitting a 'second hop' issue - going from Ansible box to windows host A and from windows host A to windows host B is, roughly speaking, not allowed (with the connection methods available at the moment).

What error do you get when running the script via ansible (use -vvvvvv to extract full output from the windows machine)?

You can run
export ANSIBLE_KEEP_REMOTE_FILES=1
before running your playbook if you want to keep the files on the server, although this is usually only done to debug modules.

Probably best asking about the NullReferenceException via octopusdeploy's site, although this issue here sounds a little like what you are encountering: http://help.octopusdeploy.com/discussions/problems/25989-nullreferenceexception-after-moving-octopus-server

Hope this helps,

Jon

Mark Matthews

unread,
Feb 24, 2016, 11:10:33 AM2/24/16
to Ansible Project
Hi Jon

I had a look at the event viewer and saw that that it is getting an access is denied error (this happens for all commands in the powershell script):

2016-02-24 15:53:12.2675      1 FATAL  System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

I am running the playbook with the server admin account, so not sure why this is failing?

Is there a way of forcing the script to run with a specific administrator account so that it succeeds?

Cheers
Mark

Trond Hindenes

unread,
Feb 24, 2016, 6:17:20 PM2/24/16
to Ansible Project
A few comments on this:
The best way to troubleshoot stuff like this is not only to try and run the script locally, but also run it using a psremoting session from another machine. That will more closely mimic what Ansible is doing.

If there is a problem with the script quitting too soon you should be able to verify this by simply adding a start-sleep to the end of your script? If that solves it the root cause of the problem won't have anything to do with Ansible, but with with Octopus.

As far as Administrators go, a default setup of windows will only allow members of the administrators group to access the server thru WinRM, and UAC is never invoked inside a WinRM session. So basically, you have as much permission as you possibly can on the machine.
Reply all
Reply to author
Forward
0 new messages