Bạn sẽ nhận thấy rằng các đề xuất chính thức cho bố cục thư mục đặt tất cả các sách phát ở cấp gốc. Điều này là có chủ ý, vì Ansible không xử lý tốt các kế hoạch khác.
Bạn có thể đặt Playbook trong thư mục con, như bạn đã bắt đầu làm, nhưng điều đó sẽ yêu cầu (như bạn đã tìm thấy) việc sử dụng các đường dẫn tương đối từ playbook đến bất kỳ tài nguyên nào khác mà chúng sử dụng; Ansible sử dụng đường dẫn Playbook để bắt đầu tìm kiếm, đó là cách nó được viết. Đối với hầu hết các phần, đó chỉ là những gì bạn có thể giải quyết khi bạn đưa ra lựa chọn di chuyển nơi chơi sách.
Tuy nhiên, bạn dường như có nhiều lồng hơn bạn nên:
---
- hosts: aws_instance.jenkins-agents
user: ec2-user
vars_files:
- ../../../vars/main.yaml
- ../../../vars/vault.yaml
...
Tại sao bạn điều hướng lên ba thư mục? Tôi mong đợi một bố cục giống như bố cục chính thức, nhưng với một thư mục con cho các sách phát; sau đó bạn sẽ kết thúc với chỉ
---
- hosts: aws_instance.jenkins-agents
user: ec2-user
vars_files:
- ../vars/main.yaml
- ../vars/vault.yaml
...
đó là một thay đổi nhỏ hơn nhiều.
Thứ hai, thật hiếm khi bạn thực sự muốn sử dụng vars_files
. Hầu hết các biến được sử dụng trong Ansible hoặc khác nhau dựa trên máy chủ (và do đó nên đi vào group_vars
/ host_vars
trong gốc dự án) hoặc là đặc trưng cho vai trò (và do đó nên đi vào vars
/ defaults
trong thư mục vai trò). Một vài liên kết tài liệu:
Cá nhân, tôi nghĩ tốt nhất là có ít nhất có thể trong các vở kịch của bạn, nhưng giao phó mọi thứ cho vai trò. Đây là một ví dụ toàn bộ playbook trong thiết lập của bạn:
- hosts: aws_instance.jenkins-agents
roles:
- ../roles/jenkins_agent
Điều này cho phép bạn linh hoạt hơn nhiều để sử dụng lại.
Và nếu bạn thấy mình không muốn sử dụng các đường dẫn tương đối cho các vai trò, bạn có thể ghi đè roles_path
trong ansible.cfg
thư mục gốc nơi bạn chạy các lệnh Ansible của mình.
../../../vars
?