【问题标题】:Ansible can't find pulled file in awx_task container although it is thereAnsible 无法在 awx_task 容器中找到拉取的文件,尽管它在那里
【发布时间】:2021-11-15 13:33:28
【问题描述】:

我的环境:

  • ansible/AWX 版本 16 和 ansible 2.9 在 Ubuntu 18 机器上的 Docker 容器中运行。
  • ansible 2.9 在多台 Ubuntu 机器上运行

我有一本剧本,我在其中调用了以下插件:

- name: "Run the sql script"
  postgresql_query:
    db: "{{db_name}}"
    login_host: "{{db_host}}"
    login_user: "{{db_user}}"
    login_password: "{{db_password}}"
    path_to_script: "{{playbook_dir}}/some/path/some_script.sql"

当我直接从命令行 (ansible_playbook playbook.yml) 在任何 Ubuntu 机器上调用此 playbook 时,一切正常,插件会找到 sql 脚本并运行它。

当我从 AWX 管理控制台运行相同的剧本时,我收到一些错误消息,告诉我它找不到 sql 脚本。我在我的剧本中添加了以下附加任务,以等待文件被拉取(认为它可能在调用时尚未被拉取):

- name: sleep for 30 seconds and continue with play
  wait_for:
    timeout: 30
    path: "{{playbook_dir}}/some/path/some_script.sql"
    state: present

但 30 秒后我收到以下错误:

TASK [export_db : sleep for 30 seconds and continue with play] ****************
fatal: [my_host]: FAILED! => {"changed": false, "elapsed": 30, "msg": "Timeout when waiting for file /tmp/awx_4414_8__3jkl_/project/some/path/some_script.sql"}

在这 30 秒内,我 ssh 进入 docker 容器(名为 awx_task),我可以注意到文件 /tmp/awx_4414_8__3jkl_/project/some/path/some_script.sql 在那里。之后所有文件夹 /tmp/awx_4414_8__3jkl_/ 都会被删除,但在 playbook 运行时它就在那里。

这让我觉得文件实际上是在其他地方搜索的,我不明白如何指定文件的路径。

结语

我终于找到了一个解决方案,通过像这样调用 local_action 在本地而不是在远程主机上运行 postgresql_query 插件:

- name: "Run the sql script"
  local_action:
  module: postgresql_query
    db: "{{db_name}}"
    login_host: "{{db_host}}"
    login_user: "{{db_user}}"
    login_password: "{{db_password}}"
    path_to_script: "{{playbook_dir}}/some/path/some_script.sql"

这样,在本地找到了sql脚本,一切顺利。

【问题讨论】:

  • 您能否详细说明“我在我的剧本中添加了以下附加任务,以等待文件被拉取(认为它可能在调用时尚未被拉取)" 因为插件没有拉文件,所以它期望文件已经在远程主机上。
  • @U880D 虽然我对 Ansible 有一些经验,但我对 AWX 还是很陌生。据我所知,当我从 AWX 运行作业时,AWX 在 awx_tasks 容器中创建一个临时文件夹,命名为 /tmp/awx_4414_8__3jkl_,将项目(库存)拉到那里,运行我指定的剧本,然后删除该文件夹.每次调用时文件夹名称都不同。我要运行的 sql 文件包含在拉取的项目中。但是当我在path_to_script 中指定它时,它不会在那个临时文件夹中搜索,而是在其他地方搜索。具体在哪里,我不知道。我如何从本地调用它?

标签: docker ansible ansible-awx


【解决方案1】:

关于

这让我觉得文件实际上是在其他地方搜索...

你是对的。根据postgresql_query_module和参数path_to_script,就是

远程主机上 SQL 脚本的路径。

你的{{ db_host }}

【讨论】:

  • 嗯,根据文档,这是真的。 :-) 但我总是针对一些 Amazon RDS 主机运行 postgresql_query 插件,因此,无法将任何 sql 脚本放在那里。我总是将path_to_script 设置为本地脚本,它可以工作。脚本被执行。也许文档具有误导性..
  • @CiprianStoica,关于“我总是将 path_to_script 设置为本地脚本,并且它有效。脚本被执行。”这对我来说是新的。我在生产设置中使用提到的模块,并且还使用脚本文件测试了查询。它按照我的环境中记录的方式工作。如果您无法将脚本复制到远程计算机,也许您可​​以在查询字符串中提供内容。
猜你喜欢
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
相关资源
最近更新 更多