Làm cách nào để chỉ định các máy chủ khác nhau cho các playbook khác nhau trong một tập lệnh ansible


9

Theo tôi hiểu, mỗi playbook có một mục lưu trữ. Tôi muốn biết rằng nếu tôi tạo một playbook container bao gồm các playbook khác, tôi có thể tham số hóa các máy chủ cho mỗi playbook bao gồm không. Vì vậy, một cái gì đó như

---
- include playbook_1.yml
    hosts: tag_postgres
- include: playbook_2.yml
    hosts: tag_rabbitmq

Tôi có thể đặt tất cả các playbook khác nhau trong một kịch bản và gọi, nhưng sau đó, tôi không thể sử dụng lại một số set_fact từ một playbook này sang một playbook khác và do đó có rất nhiều nhiệm vụ trùng lặp.

Một hệ quả khác của câu hỏi là, tôi có thể khởi chạy ec2 trên amazon không

hosts: localhost

và cấu hình của các ec2 đã khởi chạy, về cơ bản sẽ cấu hình khoảng không quảng cáo -i ec2.pyvà có các máy chủ được chỉ định là

hosts: tag_<some_tag>

xảy ra thông qua cùng một playbook hoặc một bộ playbook bao gồm (các vai trò khác nhau)?


Bạn có biết rằng bạn có thể có nhiều hơn một hosts:phần trong yaml của mình và về bản chất, có một vài cuốn sách sử dụng các nhóm máy chủ khác nhau trong kho của bạn không?
Yonsy Solis

Câu trả lời:


4

Trên thực tế, bạn có thể có nhiều hơn một máy chủ: phần trên mỗi playbook. Có vẻ như một máy chủ: bắt đầu một trò chơi mới. Ví dụ, hãy xem http://www.tecmint.com/use-ansible-playbooks-to-automate-complex-t task-on-mult Môn-linux-servers / , chẳng hạn.

Một cái gì đó như thế này làm việc cho tôi (ansible 2.2):

---
- hosts: localhost 
  connection: local
  roles:
    - { role: ec2,
        tag: 'master',
        instance_type: t2.2xlarge,
        count: 1
      }
  tasks:
  - shell: hostname # reports localhost

- hosts: tag_master
  tasks:
  - shell: hostname # reports instance(s) with tag 'master'

Vì vậy, đặt máy chủ: ở đầu mỗi .yml bao gồm, không phải sau bao gồm :.


4

http://docs.ansible.com/ansible/playbooks_variables.html#inatures-discovered-from-systems-facts

... Có những nơi khác mà các biến có thể đến từ đó, nhưng đây là một loại biến được phát hiện, không được đặt bởi người dùng.

Sự thật là thông tin bắt nguồn từ việc nói chuyện với các hệ thống từ xa của bạn ...

Các sự kiện có nguồn gốc từ máy chủ từ xa của bạn. Vì vậy, đây là lý do tại sao thông thường bạn có thể chia sẻ sự thật giữa các máy chủ khác nhau khi Tệp * .yml của bạn có một số sách phát .

Bây giờ, bạn có thể truy cập các sự kiện từ các máy chủ khác nếu bạn làm điều gì đó như thế này trong một phần khác của Playbook:

{{ hostvars['server01.example.com']['ansible_eth0']['ipv4']['address'] }}
...
...
{{ hostvars[groups['servers'][0]]['ansible_eth0']['ipv4']['address'] }}

nhưng trong trường hợp này, bạn cần nhớ rằng bạn cần lấy thông tin trước khi sử dụng. Sau đó, bạn có thể thiết lập một phần đầu tiên trong sổ chơi của mình để lấy tất cả các sự kiện cho tất cả các máy chủ hoặc sử dụng bộ đệm thực tế cho việc này (xem: http://docs.ansible.com/ansible/playbooks_variables.html#fact-caching )

Bây giờ, nếu bạn muốn chia sẻ các tùy chọn trong sổ chơi của mình, có thể tốt hơn nên suy nghĩ lại về thông tin để đặt các biến và với điều này, bạn có thể "chia sẻ" các biến của mình với cùng một includehướng dẫn, hãy xem điều này:

http://docs.ansible.com/ansible/playbooks_variables.html#variables-dposed-from-included-files-and-roles


2
Câu hỏi của tôi rất cụ thể đối với máy chủ lưu trữ, và không phải là các biến nói chung. Nhu cầu của tôi là có thể tạo ra một playbook chính không có máy chủ lưu trữ, nhưng mỗi playbook đi kèm đều chứa một máy chủ trong đó hoặc có thể được cung cấp cho nó như một tham số. Tôi luôn có thể chạy chúng dưới dạng các vở kịch riêng biệt nhưng sau đó các sự kiện thu được từ một người không chuyển sang bản tiếp theo và do đó có rất nhiều sự dư thừa
Pankaj Lal

vui lòng đọc lại phía trên: "Bây giờ, bạn có thể truy cập các sự kiện từ các máy chủ khác nếu bạn làm điều gì đó như thế này trong một phần khác của Playbook: ... nhưng trong trường hợp này, bạn cần nhớ rằng bạn cần lấy thông tin trước khi sử dụng "vì vậy, vâng, bạn có thể chia sẻ sự thật của mình giữa các sách được bao gồm trong sổ chơi chính của bạn.
Yonsy Solis
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.