How to read a line from a file into an ansible variable
I'm trying to read the database password on a remote host from the file /etc/mysql/debian.cnf
. Format of the file is below. Is there a way to parse out the password
field so I can drop a mysql user via Ansible?
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = root
password = 5unnyv4l3
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = root
password = 5unnyv4l3
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
It looks like the 'slurp' module will work for your requirements: https://docs.ansible.com/ansible/latest/modules/slurp_module.html
- name: extract password from file
slurp:
src: /etc/mysql/debian.cnf
register: mypasswordfile
- name: Set User Password
user: name=newUser
password="{{ passwordfile['content'] | b64decode | regex_findall('password = \"(.+)\"') | first }}"
Edited after testing and fixing.
If the file is local to the ansible system you can use the ini lookup which will read in values from a ini style file. If your file is remote you can use fetch/slurp to pull a copy to the local system.
I would guess the lookup would be something like
- debug: msg="Password is {{ lookup('ini', 'password section=client file=my.cnf') }}"