2014-11-05 11 views
6

Tôi muốn chạy một tác vụ cụ thể chỉ khi một cờ được đưa ra trong dòng lệnh. Ví dụ, tôi muốn chạy lệnh ansible-playbook như sau: --extra-vars "composer-install=true". Tôi bằng cách nào đó sẽ cần một nhiệm vụ kiểm tra nếu biến số composer-install được đặt, và nếu được đặt và bằng true, hãy chạy tác vụ đã cho chạy composer install. Tôi không hoàn toàn chắc chắn làm thế nào để làm điều đó phần cuối cùng.Làm thế nào để thêm các biến tùy chọn trong dòng lệnh ansible và kiểm tra sự tồn tại của chúng trong playbook?

Trả lời

8

Lý do bạn gặp lỗi là vì bạn đang truy cập biến chưa bao giờ được đặt. Bạn dường như đang sử dụng sự tồn tại của extra-var như một dấu hiệu cho thấy bạn muốn composer install chạy (tức là bạn không bao giờ truyền --extra-vars = "composer-install = false"), vì vậy bạn có thể đi với is defined :

- shell: composer install 
    when: composer-install is defined 

Nhưng các biến có thể được truyền qua bộ lọc, có thể hữu ích đối với trường hợp này, bởi vì nó vẫn cho phép bạn vượt qua đúng/sai trong khi không xác định biến ở tất cả vẫn hoạt động:

- shell: composer install 
    when: composer-install|default(false) 

Một số chi tiết khác về điều kiện có thể tìm thấy tại đây: http://docs.ansible.com/playbooks_conditionals.html

Các bộ lọc jinja2 là rất hữu ích cho nhiều hơn một lý do, vì vậy nhiều trên đó tại đây: http://docs.ansible.com/playbooks_variables.html#jinja2-filters

Và cuối cùng hoàn tất danh sách các built-in bộ lọc jinja2 đây: http://jinja.pocoo.org/docs/dev/templates/#builtin-filters

+0

Cảm ơn bạn đã trả lời thông tin, ngay cả sau khi tôi đã chọn giải pháp khác làm câu trả lời! –

+0

Trên thực tế, trong khi tôi ở đây, tôi có thể hỏi làm thế nào để sử dụng các bộ lọc jinja2 đúng cách để chuyển đổi từ chuỗi thành số nguyên và làm phép nhân? Ví dụ, tôi có một mẫu mà tôi muốn đặt một biến thành 'ansible_fact * 2' và ansible_fact cũng là một chuỗi. Tôi không thể tìm thấy nó trong tài liệu. –

+1

Có bộ lọc "int" và dường như hoạt động (phải tự kiểm tra): - debug: msg = {{'2' | int * 2}} –

1

Tôi nghĩ bạn đang tìm kiếm when parameter.

- name: optional composer install 
    shell: composer install 
    when: composer-install 
+0

Thanks, điều này đã cho tôi đi đúng hướng. Chỉ cần làm những gì bạn đã làm kết quả trong một lỗi. Giải pháp là cũng thêm một phần "vars:" vào playbook và thêm biến 'composer-install', đặt nó thành" false ". Rõ ràng các biến dòng lệnh ghi đè lên các biến được đặt trong playbook. Chúc mừng. –

Các vấn đề liên quan