解决Ansible预期路径错误

94次阅读
没有评论


fatal: [app01]: FAILED! => {“changed”: false, “failed”: true, “msg”: “Unable to find ‘demo/app/’ in expected paths.”}
fatal: [app02]: FAILED! => {“changed”: false, “failed”: true, “msg”: “Unable to find ‘demo/app/’ in expected paths.”}


错误提示中指出找不到期望路径下的 `demo/app/`。相关任务如下:

```yaml
- name: copy demo app source
  copy: src=demo/app/ dest=/var/www/demo mode=0755
  notify: restart apache2

用户尝试将 src 更改为 /demo_appsrc=demo_app/files/app,但这并没有解决问题。他希望能够修复这个错误并成功运行 Ansible playbook。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

在 Ansible 的目录结构中,根据用户提供的信息,demo_app 角色下的文件应该位于 demo_app/files/app。因此,我们需要确保 copy 任务中的 src 参数指向正确的目录。

以下是解决这个问题的几种方法:

方案1:修复源路径

修改 copy 任务,将 src 参数指定为正确的路径 app

- name: copy demo app source
  copy: src=demo_app/files/app/ dest=/var/www/demo mode=0755
  notify: restart apache2

这样做可以确保 copy 任务能够找到正确的源路径,并将 app 目录复制到 /var/www/demo

方案2:调整目录结构

如果用户希望目录结构更加简洁,可以考虑将 app 目录直接放置在 demo_app/files/ 下,而不是嵌套在 demo_app/files/demo/ 中。这样可以简化路径,并确保 copy 任务的 src 参数直接指向 app 目录。

  1. 移动 app 目录到 demo_app/files/ 下:

├── roles
│ ├── demo_app
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── files
│ │ │ └── app
│ │ │ ├── demo.py
│ │ │ └── requirements.txt
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── README.md
│ │ ├── tasks
│ │ │ └── main.yml
│ │ ├── templates
│ │ │ └── demo.wsgi.j2
│ │ ├── tests
│ │ │ ├── inventory
│ │ │ └── test.yml
│ │ └── vars
│ │ └── main.yml

  1. 修改 copy 任务,将 src 参数指定为 app

yaml
- name: copy demo app source
copy: src=demo_app/files/app/ dest=/var/www/demo mode=0755
notify: restart apache2

这样,copy 任务可以正确地找到 demo_app/files/app/,并将其复制到 /var/www/demo

方案3:使用绝对路径(不建议)

尽管这不是最优雅的解决方案,但如果以上两种方法不适用,你可以考虑使用绝对路径来指定 src。这样可以明确指定要复制的文件路径。

- name: copy demo app source
  copy: src=/path/to/demo_app/files/app/ dest=/var/www/demo mode=0755
  notify: restart apache2

但请注意,绝对路径的使用可能会导致在不同环境中出现问题,因此不建议长期使用此方法。

方案4:检查角色依赖

另一种可能性是检查 playbook 是否正确引用了 demo_app 角色,并且在 Ansible 运行时是否能够正确找到该角色。确保 playbook 中的角色名称与目录结构中的角色名称匹配,并且角色在正确的路径下。

结论

通过确保 copy 任务的 src 参数指向正确的路径,或者调整目录结构,用户可以解决 Ansible 预期路径错误,并成功运行 webserver.yml playbook。

正文完