Vagrant Ansible未设置Postgres用户密码

Vagrant Ansible未设置Postgres用户密码,vagrant,provisioning,ansible,Vagrant,Provisioning,Ansible,我正在使用Ansible提供一个从Vagrant开始的虚拟机。我已经使用(首选)VMware提供商和VirtualBox进行了测试,并且得到了相同的结果 我正在使用以下一组任务来尝试创建一个名为so的数据库,并使用access创建一个用户django。但是,似乎没有设置数据库密码。如果我手动设置,我可以连接,如果我事先尝试,我总是会得到致命:用户“django”的密码身份验证失败 我已经在下面发布了Ansible配置的相关部分,并在下面发布了调试的相关部分(Ansible.verbose=“vv

我正在使用Ansible提供一个从Vagrant开始的虚拟机。我已经使用(首选)VMware提供商和VirtualBox进行了测试,并且得到了相同的结果

我正在使用以下一组任务来尝试创建一个名为
so
的数据库,并使用access创建一个用户
django
。但是,似乎没有设置数据库密码。如果我手动设置,我可以连接,如果我事先尝试,我总是会得到
致命:用户“django”的密码身份验证失败

我已经在下面发布了Ansible配置的相关部分,并在下面发布了调试的相关部分(
Ansible.verbose=“vvv”
在vagrant配置中)

详细输出:

TASK: [Ensure DB user has access to the DB] *********************************** 
<127.0.0.1> ESTABLISH CONNECTION FOR USER: vagrant
<127.0.0.1> EXEC ['ssh', '-tt', '-q', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/Users/danielsgroves/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'Port=2222', '-o', 'IdentityFile=/Users/danielsgroves/.vagrant.d/insecure_private_key', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o', 'PasswordAuthentication=no', '-o', 'User=vagrant', '-o', 'ConnectTimeout=10', '127.0.0.1', "/bin/sh -c 'mkdir -p /tmp/ansible-1387481596.93-132175356393082 && chmod a+rx /tmp/ansible-1387481596.93-132175356393082 && echo /tmp/ansible-1387481596.93-132175356393082'"]
<127.0.0.1> REMOTE_MODULE postgresql_user name=django role_attr_flags=NOSUPERUSER,CREATEDB
<127.0.0.1> PUT /var/folders/2j/n8ng8fdd5gj125w5zswg9kj00000gn/T/tmpvnrb37 TO /tmp/ansible-1387481596.93-132175356393082/postgresql_user
<127.0.0.1> EXEC ['ssh', '-tt', '-q', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/Users/danielsgroves/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'Port=2222', '-o', 'IdentityFile=/Users/danielsgroves/.vagrant.d/insecure_private_key', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o', 'PasswordAuthentication=no', '-o', 'User=vagrant', '-o', 'ConnectTimeout=10', '127.0.0.1', "/bin/sh -c 'chmod a+r /tmp/ansible-1387481596.93-132175356393082/postgresql_user'"]
<127.0.0.1> EXEC ['ssh', '-tt', '-q', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/Users/danielsgroves/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'Port=2222', '-o', 'IdentityFile=/Users/danielsgroves/.vagrant.d/insecure_private_key', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o', 'PasswordAuthentication=no', '-o', 'User=vagrant', '-o', 'ConnectTimeout=10', '127.0.0.1', '/bin/sh -c \'sudo -k && sudo -H -S -p "[sudo via ansible, key=isnxrvycjudgazbgyciehbcpiiswfczx] password: " -u postgres /bin/sh -c \'"\'"\'echo SUDO-SUCCESS-isnxrvycjudgazbgyciehbcpiiswfczx; /usr/bin/python /tmp/ansible-1387481596.93-132175356393082/postgresql_user\'"\'"\'\'']
<127.0.0.1> EXEC ['ssh', '-tt', '-q', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/Users/danielsgroves/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'Port=2222', '-o', 'IdentityFile=/Users/danielsgroves/.vagrant.d/insecure_private_key', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o', 'PasswordAuthentication=no', '-o', 'User=vagrant', '-o', 'ConnectTimeout=10', '127.0.0.1', "/bin/sh -c 'rm -rf /tmp/ansible-1387481596.93-132175356393082/ >/dev/null 2>&1'"]
ok: [server] => {"changed": false, "user": "django"}
TASK:[确保数据库用户有权访问数据库]******************************************
为用户建立连接:vagrant
执行官['ssh'、'-tt'、'-q'、'-o'、'ControlMaster=auto'、'-o'、'ControlPersist=60s'、'-o'、'ControlPath=/Users/danielsgroves/.ansible/cp/ansible-ssh-%h-%p-%r'、'-o'、'Port=2222'、'-o'、'IdentityFile=/Users/danielsgroves/.vagrant.d/unsecure\u private\u-key'、'o'、'kbdinteractivateautation=no'、'o'、'PreferredAuthentications=gsi-mic、gssapi、gssapi-sapex、gsi基于OST的,公钥','-o',密码验证=否','-o',用户=流浪','-o',连接超时=10',127.0.0.1',“/bin/sh-c'mkdir-p/tmp/ansible-1387481596.93-132175356393082&&chmod a+rx/tmp/ansible-1387481596.93-132175356393082&&echo/tmp/ansible-1387481596.93-132175356393082'”
远程\u模块postgresql\u用户名=django角色\u属性\u标志=无超级用户,CREATEDB
将/var/folders/2j/n8ng8fdd5gj125w5zswg9kj00000gn/T/tmpvnrb37放入/tmp/ansible-1387481596.93-132175356393082/postgresql\U用户
执行官['ssh'、'-tt'、'-q'、'-o'、'ControlMaster=auto'、'-o'、'ControlPersist=60s'、'-o'、'ControlPath=/Users/danielsgroves/.ansible/cp/ansible-ssh-%h-%p-%r'、'-o'、'Port=2222'、'-o'、'IdentityFile=/Users/danielsgroves/.vagrant.d/unsecure\u private\u-key'、'o'、'kbdinteractivateautation=no'、'o'、'PreferredAuthentications=gsi-mic、gssapi、gssapi-sapex、gsi基于OST的,公钥','-o',密码验证=否','-o',用户=流浪者','-o',连接超时=10',127.0.0.1',“/bin/sh-c'chmod a+r/tmp/ansible-1387481596.93-132175356393082/postgresql_User'”
执行官['ssh'、'-tt'、'-q'、'-o'、'ControlMaster=auto'、'-o'、'ControlPersist=60s'、'-o'、'ControlPath=/Users/danielsgroves/.ansible/cp/ansible-ssh-%h-%p-%r'、'-o'、'Port=2222'、'-o'、'IdentityFile=/Users/danielsgroves/.vagrant.d/unsecure\u private\u-key'、'o'、'kbdinteractivateautation=no'、'o'、'PreferredAuthentications=gsi-mic、gssapi、gssapi-sapex、gsi基于OST的,公钥','-o',密码验证=否','-o',用户=流浪者','-o',连接超时=10',127.0.0.1','/bin/sh-c'sudo-k&&sudo-H-S-p“[sudo via ansible,key=isnxrvycjudgeazbgiebgiehbcipiswfcczx]密码:“-u postgres/bin/sh-c\'”\“echo SUDO SUCCESS IsnxrvyJudgeAzbgyCiehbCPiIswfcxx;/usr/bin/python/tmp/ansible-1387481596.93-132175356393082/postgresql\u user\'”]
执行官['ssh'、'-tt'、'-q'、'-o'、'ControlMaster=auto'、'-o'、'ControlPersist=60s'、'-o'、'ControlPath=/Users/danielsgroves/.ansible/cp/ansible-ssh-%h-%p-%r'、'-o'、'Port=2222'、'-o'、'IdentityFile=/Users/danielsgroves/.vagrant.d/unsecure\u private\u-key'、'o'、'kbdinteractivateautation=no'、'o'、'PreferredAuthentications=gsi-mic、gssapi、gssapi-sapex、gsi基于OST的,公钥','-o',密码验证=否','-o',用户=流浪者','-o',连接超时=10',127.0.0.1',“/bin/sh-c'rm-rf/tmp/ansible-1387481596.93-132175356393082/>/dev/null 2>&1']
确定:[服务器]=>{“已更改”:false,“用户”:“django”}

该剧本中的最后一个任务将不会由ansible运行-模块名称前没有连字符。请将其更改为:

-postgresql\u用户:
名称:“{dbuser}}”
角色属性标志:“NOSUPERUSER,CREATEDB”
或者(我更喜欢命名所有任务)

-name:为DB用户设置角色
postgresql\u用户:
名称:“{dbuser}}”
角色属性标志:“NOSUPERUSER,CREATEDB”
然后,您应该能够以django用户的身份登录

$ psql -U django -h localhost so

如果没有设置任何角色,用户就无法登录。我认为“登录”角色必须隐含在指定的角色中,尽管我还没有在PostgreSQL文档中确认这一点。

有趣的是,这似乎在物理框上有效,而不是在流浪的VM上。我会在一分钟后进一步调查。你知道了吗?Un幸运的是,没有。但是,同一命令在另一个provisioner中工作,该provisioner正用于Digital Ocean托管的生产箱。请参阅下面的@eadmundo更新答案。您的最后一个任务有两个操作。只执行最后一个操作,忽略第一个操作。这个问题是关于如何使用ansible执行此操作,而不是命令行。您能提供一个ansible任务来添加主机吗?
$ psql -U django -h localhost so