failed to parse: SUDO-SUCCESS-ugbdmgqomyttgubummftugavvodrnugl when using mysql_user with password lookup

Similar to this discussion https://groups.google.com/d/msg/ansible-project/aBE51ToAC7A/QC3jwdPOK4MJ

I am getting this error:

failed to parse: SUDO-SUCCESS-ugbdmgqomyttgubummftugavvodrnugl

I am trying to make use of the password lookup in mysql_user like so

  • name: create and/or update database user
    mysql_user:
    login_user={{ mysqluser }}
    login_password={{ mysqlpassword }}
    name={{ databaseuser }}
    password={{ lookup(‘password’, ‘/tmp/passwordfile length=15’) }}
    append_privs=yes
    priv={{ databasename }}.*:SELECT,INSERT,UPDATE,DELETE

I was previously using a similar play to get a password via an api and that worked so I know the syntax is correct, its just the introduction of the password lookup which seems to have broken things.

Client: Mac OS X 10.6.8
Server: Debian 7

Any ideas?

Are you using sudo to execute this? In that case, you may be hitting this bug:

https://github.com/ansible/ansible/issues/5533

There are pull-requests open to address this, which I will be looking to test today.

I never got the message to say there was a reply so sorry for the delay in getting back to you.

I have disabled sudo for that play and updated to ansible 1.5.3.

The play now works but does not create a file at /tmp/passwordfile and if I try to use an alternative directory, it errors completely differently

failed: [g.b4dev.com] => {“failed”: true, “parsed”: false}
invalid output was: Traceback (most recent call last):
File “/home/wh/.ansible/tmp/ansible-tmp-1394795091.79-153729821362509/mysql_user”, line 1561, in
main()
File “/home/wh/.ansible/tmp/ansible-tmp-1394795091.79-153729821362509/mysql_user”, line 459, in main
changed = user_add(cursor, user, host, password, priv)
File “/home/wh/.ansible/tmp/ansible-tmp-1394795091.79-153729821362509/mysql_user”, line 158, in user_add
cursor.execute(“CREATE USER %s@%s IDENTIFIED BY %s”, (user,host,password))
File “/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py”, line 174, in execute
self.errorhandler(self, exc, value)
File “/usr/lib/python2.7/dist-packages/MySQLdb/connections.py”, line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (1396, “Operation CREATE USER failed for ‘test’@‘localhost’”)

What happens if you use debug: var={{ lookup('password', '/tmp/passwordfile
length=15') }} ?

Really though, this seems like your mysqluser/mysqlpassword variables are
incorrect, or the user you're connecting as does not have the proper GRANT
permissions to add/edit the user.

Can you run other actions with that user/passord?

The MySQL account I use should be all singing all dancing.

I think I may have figured it out.

The debug command came back with a value but I couldn’t find the passwordfile and then it occurred to me that the file might be local and sure enough it was.

Did I miss the part where the file lookup works on local files and not remote files?

Yes, all lookups like that (and action_plugins too) occur locally on the machine running ansible, not remotely. Looking through http://docs.ansible.com/playbooks_lookups.html, it does not mention that specifically, so it would be good to add. Please feel free to open up a github issue for that.

Thanks!

Done and done. Thank you for your help! :slight_smile: