Ansible won';不要按它应该的方式解释命令

Ansible won';不要按它应该的方式解释命令,ansible,Ansible,此模块向我发送了一个大约000000b(语法)的错误,但当我使用命令时: psql-U postgres-c“使用密码'000000b'创建用户gitlab;” 在航站楼,它工作正常 为什么Ansible会以其他方式解释我的命令?它失败了,因为您的命令对于ansibles命令模块来说太复杂了(通过3个不同的命令行解释器传递转义序列等等;)。你也许可以用很多巧妙的转义序列来修复它,但我不建议你尝试,主要是因为它破坏了幂等性,其次是因为它真的不可读,维护起来很烦人,第三是因为这样做会使你的衰老速度加

此模块向我发送了一个大约000000b(语法)的错误,但当我使用命令时:
psql-U postgres-c“使用密码'000000b'创建用户gitlab;”
在航站楼,它工作正常


为什么Ansible会以其他方式解释我的命令?

它失败了,因为您的命令对于ansibles命令模块来说太复杂了(通过3个不同的命令行解释器传递转义序列等等;)。你也许可以用很多巧妙的转义序列来修复它,但我不建议你尝试,主要是因为它破坏了幂等性,其次是因为它真的不可读,维护起来很烦人,第三是因为这样做会使你的衰老速度加快2.34倍

如果您只想使用ansible快速而直接地创建一个gitlab用户,那么您可以这样做(仍然会破坏幂等性,这意味着您必须在多次运行时捕获错误):

  • 确保将容器postgres端口公开给本地主机:

    docker run-d--name postgres-p 5432:5432 postgres

  • 将playbook任务更改为以下内容:

    - name: Execute commands in docker postgres container
      command: docker exec -i postgres bash -c 'psql -U postgres -c "create user gitlab with password '000000b';"'
    
然而,在我看来,正确的方法是利用ansibles模块:

对于本例,我使用上述命令在docker容器中运行postgresql

playbook.yml:

这需要在系统上安装
psycopg2
,可以从发行版repos或pypi获得。此外,您可能希望提供哈希密码,而不是明文密码。链接模块文档也解决了这一问题

- command: psql -h localhost -U postgres -c "create user gitlab with password '000000b';"
  ignore_errors: yes
---
- hosts: localhost
  tasks:
  - name: create gitlab user
    postgresql_user:
      login_host: localhost
      login_user: postgres
      name: gitlab
      password: '000000b'