Chỉ chạy tác vụ nếu máy chủ lưu trữ không thuộc nhóm


106

Tôi chỉ muốn chạy một tác vụ có thể kiểm soát được nếu máy chủ của sổ chơi hiện tại không thuộc một nhóm nhất định. Trong mã bán giả:

- name: my command
  command: echo stuff
  when: "if {{ ansible_hostname }} not in {{ ansible_current_groups }}"

Tôi nên làm điều này như thế nào?

Câu trả lời:


198

Đây là một cách khác để làm điều này:

- name: my command
  command: echo stuff
  when: "'groupname' not in group_names"

group_nameslà một biến ma thuật như được ghi lại ở đây: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables :

group_names là một danh sách (mảng) của tất cả các nhóm mà máy chủ lưu trữ hiện tại đang ở.


3
+1 và nếu bạn không bao gồm các báo xung quanh bạn nhận được lỗi:This one looks easy to fix. It seems that there is a value started with a quote, and the YAML parser is expecting to see the line ended with the same kind of quote.
Peter Ajtai

3
Tôi thấy cách tiếp cận này dễ đọc và thuận tiện hơn khi viết, nhưng cả hai đều hoạt động tốt như nhau. when: inventory_hostname not in groups.certain_groups
Liam

4
Cách này chắc chắn hơn là inventory_hostname in groups['groupname']vì trong trường hợp bản thân vữa không tồn tại, Ansible sẽ đưa ra một lỗi như "Đảm bảo rằng tên biến của bạn không chứa các ký tự không hợp lệ như '-': đối số của loại 'nghiêm ngặt' không thể lặp lại"
hamx0r

19

Bạn có thể đặt biến điều khiển trong tệp vars nằm trong group_vars/hoặc trực tiếp trong tệp máy chủ như sau:

[vagrant:vars]
test_var=true

[location-1]
192.168.33.10 hostname=apollo

[location-2]
192.168.33.20 hostname=zeus

[vagrant:children]
location-1
location-2

Và chạy các tác vụ như thế này:

- name: "test"
  command: "echo {{test_var}}"
  when: test_var is defined and test_var

2
Câu trả lời được chấp nhận là chính xác hơn cho câu hỏi, nhưng điều này dẫn bạn xuống một con đường tốt hơn
nik.shornikov
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.