Playbook không có đường dẫn tương đối đến vars


8

Tôi đã có rất nhiều sách vở, vì vậy tôi bắt đầu tổ chức chúng trong các vở kịch . Nó gây ra phải có đường dẫn tương đối đến các tệp vars.

Playbook thực tế:

---
- hosts:  aws_instance.jenkins-agents
  user:   ec2-user
  vars_files:
    - ../../../vars/main.yaml
    - ../../../vars/vault.yaml
  ...

Có cách nào để giữ cấu trúc dir, nhưng tránh gia đình lochness ( ../../../) không?

Tôi biết vai trò Bạn có thể chỉ định đường dẫn đến chúng, nhưng tôi không tìm thấy bất cứ điều gì tương tự cho vars_files

Điều kiện dự án:

  1. Chúng ta cần chạy playbooks từ gốc của dự án
  2. Cả varsplaybooks dir đều nằm trong thư mục gốc của dự án
  3. Dự án này không có kho / máy chủ tĩnh, nhưng nó được tạo nhanh khi bạn chạy một số playbook

1
Có lẽ bạn có thể sử dụng một biến cho phần tương đối của bạn ../../../vars?
Tensibai

Câu trả lời:


6

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_varstrong gốc dự án) hoặc là đặc trưng cho vai trò (và do đó nên đi vào vars/ defaultstrong 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_pathtrong ansible.cfgthư mục gốc nơi bạn chạy các lệnh Ansible của mình.


2

Vì tôi chưa thể nhận xét về câu trả lời của 030 (chỉ cần mở một tài khoản), tôi sẽ trả lời ở đây.

Các thư mục vars nhóm có liên quan đến đường dẫn Ansible.

Bạn không phải chạy Ansible từ / etc / ansible. Bạn có thể chạy nó từ ~ / .hidden / thư mục / thứ nếu muốn. Chỉ cần đảm bảo giữ một cấu trúc thư mục. I E:

/pipeline/   # ansible playbooks are here
/pipeline/roles
/pipeline/group_vars

Sau đó, bạn có thể chạy một cái gì đó như

cd /pipeline
ansible-playbook deploy_app.yml

Mà sẽ đọc các vars nhóm từ thư mục pipe / group_vars. Tốt hơn là nên cd vào thư mục gốc ansible của bạn trước vì nó tìm đường dẫn từ thư mục hiện tại mà bạn đang ở nếu nó không thể tìm thấy chúng ở vị trí mặc định (/ etc / ansible), để bạn có thể đặt ansible.cfg của mình vào / đường ống mà không phải xác định các đối số dòng lệnh khác. Bạn cũng có thể tùy ý xác định các đường dẫn cụ thể bên trong ansible.cfg.

Bạn có thể tiến thêm một bước và thiết lập các lọ nhóm riêng biệt cho từng môi trường / vị trí / vv:

/pipeline/prod/group_vars/all.yml
/pipeline/dev/group_vars/all.yml

Và chạy như sau bằng cách sử dụng vars bao gồm.

ansible-playbook triển khai_app.yml -i prod


Tôi khuyên bạn nên sắp xếp các biến theo nhóm, điều duy nhất là nếu bạn đặt hàng tồn kho của bạn vào thư mục con, bạn nên đặt một liên kết tượng trưng đến nhóm và nhóm chủ vào thư mục con hàng tồn kho.
Jiri Klouda

1

Để tránh những vấn đề như vậy, đó là lý do tại sao có Máy chủ và Nhóm trong Ansible .

/etc/ansible/group_vars/raleigh # can optionally end in '.yml', '.yaml', or '.json'
/etc/ansible/group_vars/webservers
/etc/ansible/host_vars/foosball

Điều này không trả lời câu hỏi của tôi, nhưng đó là ý tưởng thú vị để có các giá trị cho mỗi nhóm. Các biến Chúng tôi có hầu hết liên quan đến các nhóm cụ thể. Chỉ là các /etcbiến thể sẽ không làm việc cho chúng tôi. Tôi hy vọng nó sẽ có thể nhận chúng từ dự án.
Mailo Světel

Nó không phải nằm trong thư mục vv. Nếu các thư mục vars máy chủ và nhóm được đặt trong thư mục ansible thì nó sẽ hoạt động
030
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.