Biến có đường dẫn đến ansible-playbook hiện đang thực thi?


109

Có một biến ansible có đường dẫn tuyệt đối đến ansible-playbook hiện đang thực thi không?

một số ngữ cảnh: Tôi đang chạy / tạo một tập lệnh ansible chống lại localhostđể định cấu hình một docker mysql và muốn gắn kết khối lượng dữ liệu liên quan đến tập lệnh ansible.

Ví dụ: giả sử tôi đã kiểm tra một kho lưu trữ ~/branch1/và sau đó tôi chạy, ansible-playbook dev.ymltôi nghĩ rằng nó nên lưu khối lượng vào ~/branch1/.docker_volume/. Nếu tôi chạy nó từ ~/branch2đó thì nó sẽ định cấu hình âm lượng ~/branch2/.docker_volume/.


2
Một câu hỏi thú vị, mà tôi chưa bao giờ nghĩ đến. Tuy nhiên, việc bạn đang hỏi nó là một dấu hiệu cho thấy bạn có thể đang làm điều gì đó sai lầm.
Antonis Christofides

Tôi đồng ý, tôi sẽ xây dựng @AntonisChristofides
Josh Unger

Câu trả lời:


192

Bạn có thể sử dụng playbook_dirbiến.


2
Tôi đang đối mặt với một vấn đề tương tự và câu trả lời của bạn đã giải quyết được nó. Cảm ơn. Tuy nhiên, tôi không thể tìm thấy bất kỳ nơi nào mà playbook_dirbiến được ghi lại. Bạn có thể chỉ cho tôi tài liệu được không. HOẶC, bạn có thể giải thích làm thế nào bạn biết về biến này?
slayedbylucifer

3
Tôi tìm thấy nó trong mã không thể đọc được: github.com/ansible/ansible/blob/…
Seva Poliakov

2
CŨNG CÓ, có repo github.com/lorin/ansible-quickref thú vị với tất cả các biến.
Seva Poliakov

46

Dường như không có một biến nào chứa chính xác những gì bạn muốn.

Tuy nhiên, trích dẫn tài liệu :

Cũng có sẵn, inventory_dirlà tên đường dẫn của thư mục chứa tệp máy chủ hàng tồn kho của Ansible, inventory_filelà tên đường dẫn và tên tệp trỏ đến tệp máy chủ hàng tồn kho của Ansible.

playbook_dir chứa thư mục cơ sở playbook.

Và cuối cùng, role_pathsẽ trả về tên đường dẫn của vai trò hiện tại (kể từ ngày 1.8). Điều này sẽ chỉ hoạt động bên trong một vai trò.

Tùy thuộc vào thiết lập của bạn, những thứ đó hoặc $ pwdgiải pháp dựa trên có thể là đủ.


2

Thật không may là không có. Trên thực tế, đường dẫn tuyệt đối hơi vô nghĩa (và có khả năng gây nhầm lẫn) trong bối cảnh Ansible chạy như thế nào. Tóm lại, khi bạn gọi một playbook thì đối với mỗi tác vụ, Ansible sẽ sao chép vật lý mô-đun được liên kết với nhiệm vụ đó vào một thư mục tạm thời trên máy đích và sau đó gọi mô-đun với các tham số cần thiết. Vì vậy, đường dẫn tuyệt đối trên máy đích chỉ là một thư mục tạm thời chỉ chứa một vài tệp tạm thời bên trong nó, và nó thậm chí không bao gồm toàn bộ playbook. Ngoài ra, việc biết đường dẫn đầy đủ của một tệp trên máy chủ Ansible là khá vô ích trên máy mục tiêu trừ khi bạn đang sao chép toàn bộ cây thư mục Ansible của mình trên các mục tiêu.

Để xem tất cả các biến được xác định bởi Ansible, bạn chỉ cần chạy lệnh sau :

$ ansible -m setup hostname

Lý do bạn nghĩ rằng bạn cần biết đường dẫn tuyệt đối đến playbook là gì?


Cảm ơn Bruce, tôi đã sửa đổi câu hỏi của mình để giải thích rõ hơn những gì tôi đang cố gắng làm.
Josh Unger

6
Con đường cục bộ tuyệt đối không vô nghĩa chút nào. Ví dụ, nó có thể được sử dụng để chạy bất kỳ lệnh cục bộ nào và / hoặc truy vấn các tệp hoặc dịch vụ cục bộ khác không thể được đưa vào cấu hình ansible trực tiếp. Thực tế đơn giản là ansible có local_actionmô-đun có nghĩa là có các trường hợp sử dụng hợp pháp cho việc này.
Cray

1

Tôi đang sử dụng một cuốn sách như thế này để kiểm tra các vai trò của mình tại địa phương:

---
- hosts: localhost
  roles:
     - role: .

nhưng điều này đã ngừng hoạt động với Ansible v2.2.

Tôi đã gỡ lỗi giải pháp nói trên của

---
- hosts: all
  tasks:
    - name: Find out playbooks path
      shell: pwd
      register: playbook_path_output
    - debug: var=playbook_path_output.stdout

và nó tạo ra thư mục chính của tôi chứ không phải "thư mục làm việc hiện tại"

Tôi đã giải quyết với

---
- hosts: all
  roles:
    - role: '{{playbook_dir}}'

cho mỗi giải pháp trên.


1

Không có biến tích hợp cho mục đích này, nhưng bạn luôn có thể tìm ra đường dẫn tuyệt đối của playbook bằng lệnh "pwd" và đăng ký đầu ra của nó với một biến.

- name: Find out playbook's path
  shell: pwd
  register: playbook_path_output
- debug: var=playbook_path_output.stdout

Bây giờ, đường dẫn có sẵn trong biến playbook_path_output.stdout


7
Trong trường hợp pwdnày không trả về đường dẫn của tập lệnh playbook. Nó trả về thư mục hiện tại của tiến trình (bình thường ansible-playbook). Cả hai không nhất thiết phải giống nhau và phụ thuộc vào cách chính xác mà ansible được gọi.
Cray

5
@Cray là chính xác. Bất kể, tôi chỉ muốn đề cập rằng Ansible đã chuẩn bị biến này dành cho bạn: debug: var=ansible_env.PWD(điều này mang lại cho tôi những thư mục mà từ đó tôi thực hiện ansible-playbooktrên máy tính địa phương của tôi và các thư mục chính trên các máy chủ từ xa)
NS du Toit

4
Ngoài ra, bạn có thể tìm thấy thư mục hiện tại với:{{ lookup('env','PWD') }}
isedwards
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.