Ansible user module set user password

ansible

My English is not so good, sorry

I use ansible ad-hoc to set some user's password
Use:

python -c "from passlib.hash import sha512_crypt; import getpass; print sha512_crypt.using(rounds=5000).hash(getpass.getpass())"

generate crypted password, I got this:

$6$3k8DQBapvmIOZu4W$JMWhRB8kfqttNBI9NuRFZlPFpo6g4cb5v7obrqNaGZepxQ1AFCXdYv5IEU5lJFeHJXouyaQlJADcMtdMCjhXz0

run ansible ad-hoc

ansible localhost -m user -a "name=testuser password='$6$3k8DQBapvmIOZu4W$JMWhRB8kfqttNBI9NuRFZlPFpo6g4cb5v7obrqNaGZepxQ1AFCXdYv5IEU5lJFeHJXouyaQlJADcMtdMCjhXz0' state=present"

run ok, but in /etc/shadow

[root@localhost roles_test]# grep testuser /etc/shadow
testuser:k8DQBapvmIOZu4W:17420:0:99999:7:::

Oops, only a part of crypted password, not a full string

ansible localhost -m user -a "name=testuser password='\$6\$3k8DQBapvmIOZu4W\$JMWhRB8kfqttNBI9NuRFZlPFpo6g4cb5v7obrqNaGZepxQ1AFCXdYv5IEU5lJFeHJXouyaQlJADcMtdMCjhXz0' state=present"

works fine, but it look like not smart .

So, how to fix this?
Thx

Best Answer

This is because of bash variable substitution.

Try:

ansible localhost -m user -a 'name=testuser password=$6$3k8DQBapvmIOZu4W$JMWhRB8kfqttNBI9NuRFZlPFpo6g4cb5v7obrqNaGZepxQ1AFCXdYv5IEU5lJFeHJXouyaQlJADcMtdMCjhXz0 state=present'