ansible chạy biến toàn cầu


8

Tôi muốn tạo một cụm máy chủ, sử dụng ansible.

Trong một cuốn sách chính, tôi bao gồm một số sách phụ.

- include: playbook_commandserver.yml
- include: playbook_agent.yml

Trong playbook_commandserver.yml, tôi tạo máy chủ lệnh (trên aws). Sau đó, tôi kích hoạt một vai trò, sử dụng set_factmô-đun để ghi nhớ tên dns của máy chủ lệnh:

- name: Get hostname of command server
  shell: /usr/bin/host $(/usr/bin/curl -s http://ipecho.net/plain) | /usr/bin/awk '{print $5}' | /usr/bin/awk -F 'aws.com' '{print $1"aws.com"}'
  register: cs
- name: Set hostname of command server as fact
  set_fact: commandserver="{{ cs.stdout }}"

Các commandserverthực tế có sẵn trong vở kịch cùng, nhưng không phải trong playbook cùng .. hãy để một mình trong playbook_agent.yml, mà được bao gồm, sau đó. Và nó chính xác ở đó, nơi tôi sẽ cần truy cập vào máy chủ thực tế đó.

Vậy làm thế nào để một bộ biến / lưu trữ, có giá trị cho việc chạy hoàn toàn ansible?

Tôi đã tìm thấy điều này: /programming/26732241/ansible-save-registered-variable-to-file Tuy nhiên với tôi đây có vẻ là một vụ hack xấu xí.

Có không có giải pháp tốt hơn cho vấn đề này? Có cách nào để đặt biến không, có hợp lệ cho toàn bộ hoạt động không?

Câu trả lời:


12

Vâng, điều này là có thể. Khi bạn đặt một thực tế với set_factmô-đun, thực tế này có thể truy cập được thông qua "hostvars". Vì vậy, nếu bạn xác định máy chủ lệnh biến của mình như vậy:

  - name: Set hostname of command server as fact
    set_fact: commandserver="{{ cs.stdout }}"

sau đó bạn có thể truy cập vào biến này trong các playbook khác có cùng cách chơi theo cách đó (mô-đun gỡ lỗi chỉ là một ví dụ):

  - debug: msg="{{ hostvars['put the hostname in here']['commandserver'] }}"
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.