bash script not writing to file with ansible, but does locally

35 views
Skip to first unread message

richard kappler

unread,
Sep 15, 2016, 3:30:28 PM9/15/16
to Ansible Project
I have a bash script ( I know, it's a bit sloppy):

#!/bin/sh

df -h >> mongo-rebuild-validate.log 2>&1

/opt/mongodb/bin/mongo localhost:27017 /opt/mongodb/mongodb-create-visionnode.js >> mongo-rebuild-validate.log 2>&1

/opt/mongodb/bin/mongoimport --host 127.0.0.1 --db visionnode --collection ftpUser --file /opt/mongodb/ftpUserJSON-Linux.js  >> mongo-rebuild-validate.log 2>&1

df -h >> mongo-rebuild-validate.log 2>&1

 on remotes servers that works fine, does what I designed it to do, including writing all the stdout and stderr to the intended log.

However, when try to run this script remotely using:

---
- name: Rebuild the mongo db
  hosts: servers
  gather_facts: false
  tasks:

  - name: execute rebuild-SSPC-db.sh
    command: /opt/mongodb/rebuild-SSPC-db.sh

  - name: bring back validation file
    fetch: src=/opt/mongodb/mongo-rebuild-validate.log dest=/playbooks/MongoRebuild/validations/prefix-{{ inventory_hostname }} flat=yes

it rebuilds the database and creates the ftpUser, but it does not write anything to the validation log.

What am I missing?

Matt Davis

unread,
Sep 15, 2016, 3:46:59 PM9/15/16
to Ansible Project
Since your script doesn't specify an absolute path for the output, I suspect it's writing it to the Ansible module tempdir, which is being promptly deleted as soon as the task finished. Try adding a chdir=/some/permanent/path to the end of the command task to run the script from a non-ephemeral location.

richard kappler

unread,
Sep 16, 2016, 12:24:07 PM9/16/16
to Ansible Project
That was it, once I set an absolute path to the log, it worked. Thanks Matt!
Reply all
Reply to author
Forward
0 new messages