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_app
和 src=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
目录。
- 移动
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
- 修改
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。