Hướng dẫn dành cho người mới bắt đầu - Sách phát, các biến và khoảng không quảng cáo hữu hiệu

Beginner S Tutorial Ansible Playbooks



Sách phát Ansible là các tệp chứa các tác vụ được chạy để định cấu hình máy chủ với Ansible. Sách chơi Ansible được viết ở định dạng YAML. YAML là một định dạng tệp rất đơn giản giống như JSON. Tôi sẽ cho bạn thấy playbook Ansible YAML trông như thế nào trong phần sau của bài viết này.

Các tệp Ansible Inventory duy trì một danh sách các máy chủ mà bạn muốn định cấu hình hoặc quản lý bằng Ansible. Bạn có thể nhóm các máy chủ này và quản lý chúng theo nhóm. Bạn cũng có thể chuyển các biến khác nhau cho từng máy chủ hoặc cho một nhóm máy chủ.







Trong bài viết này, tôi sẽ chỉ cho bạn cách làm việc với Ansible playbook, biến, tệp khoảng không quảng cáo và một số mô-đun Ansible phổ biến với các ví dụ thực tế. Vì vậy, chúng ta hãy bắt đầu!



Điều kiện tiên quyết

Nếu bạn muốn thử các ví dụ trong bài viết này,



1) Bạn phải cài đặt Ansible trên máy tính của mình.
2) Bạn phải có ít nhất một máy chủ Ubuntu / Debian và một máy chủ CentOS / RHEL 8 được định cấu hình để tự động hóa Ansible.





Có rất nhiều bài viết trên LinuxHint dành riêng cho Cài đặt Ansible và cấu hình máy chủ để tự động hóa Ansible. Bạn có thể xem các bài báo này nếu cần để biết thêm thông tin.

Tạo thư mục dự án

Đầu tiên, tạo một thư mục dự án ~ / dự án / với lệnh sau:

$mkdir -pv~/dự án/sách chơi

Điều hướng đến ~ / dự án / thư mục như sau:

$đĩa CD~/dự án

Tệp Kiểm kê Cơ bản:

Tạo tệp khoảng không quảng cáo Ansible máy chủ trong thư mục dự án bằng lệnh sau:

$nanomáy chủ

Bạn có thể nhập địa chỉ IP của các máy chủ bạn muốn định cấu hình / tự động hóa bằng Ansible trong máy chủ tệp hàng tồn kho.

192.168.20.167
192.168.20.168
192.168.20.169
192.168.20.170

Sau khi bạn hoàn thành bước này, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Nếu bạn muốn sử dụng tên DNS thay vì địa chỉ IP trong tệp kiểm kê, bạn cũng có thể làm điều này.

Nếu bạn không có máy chủ DNS đang hoạt động, bạn có thể sử dụng / etc / hosts tệp trên máy tính của bạn để phân giải DNS cục bộ.

Để phân giải DNS cục bộ, hãy mở / etc / hosts tệp bằng trình soạn thảo văn bản ( nano , trong trường hợp của tôi) như sau:

$sudo nano /Vân vân/máy chủ

Nhập địa chỉ IP và tên DNS mong muốn của bạn như sau:

192.168.20.167 vm1.nodekite.com
192.168.20.168 vm2.nodekite.com
192.168.20.169 vm3.nodekite.com
192.168.20.170 vm4.nodekite.com

Sau khi bạn hoàn thành bước này, hãy nhấn + NS theo dõi bởi .

Mở tệp kiểm kê Ansible máy chủ như sau:

$nanomáy chủ

Bây giờ bạn có thể nhập tên DNS của máy chủ bạn muốn định cấu hình / tự động hóa bằng Ansible trong máy chủ tệp hàng tồn kho.

vm1.nodekite.com
vm2.nodekite.com
vm3.nodekite.com
vm4.nodekite.com

Sau khi bạn hoàn tất, hãy lưu tệp kiểm kê máy chủ lưu trữ bằng cách nhấn + NS theo dõi bởi .

Kiểm tra khả năng kết nối với tất cả các máy chủ

Bây giờ, bạn có thể thử ping tất cả các máy chủ trong tệp khoảng không quảng cáo như sau:

$có thể ăn được-tôitổ chức tất cả-ucó thể ăn được-NS ping

Như bạn có thể thấy, tất cả các máy chủ trong tệp khoảng không quảng cáo đều có thể truy cập được. Vì vậy, chúng tôi đã sẵn sàng để chuyển sang phần tiếp theo của bài viết này.

Playbook Ansible đầu tiên của bạn

Hãy để chúng tôi tạo một playbook Ansible đơn giản ping_all_hosts.yaml bên trong sách chơi/ danh mục. Hành động này sẽ ping tất cả các máy chủ trong máy chủ tệp hàng tồn kho, như trước đây.

$nanosách chơi/ping_all_hosts.yaml

Nhập các dòng sau vào ping_all_hosts.yaml Tệp sách vở có thể kiểm soát:

- máy chủ: tất cả
người dùng: ansible
nhiệm vụ:
- tên: Ping tất cả các máy chủ
ping:

Ở đây,

máy chủ: tất cả - chọn tất cả các máy chủ từ tệp kiểm kê máy chủ .
người dùng: ansible - cho Ansible biết SSH vào các máy chủ trong tệp hàng tồn kho dưới dạng có thể ăn được người sử dụng.
nhiệm vụ - tất cả các tác vụ mà Ansible sẽ thực hiện trong máy chủ được liệt kê ở đây. Mỗi nhiệm vụ thường có một Tên và một hoặc nhiều tùy chọn mô-đun cụ thể.

Sách vở ping_all_hosts.yaml chỉ có một nhiệm vụ, ping tất cả các máy chủ trong tệp kiểm kê máy chủ . Tên của nhiệm vụ là Ping tất cả các máy chủ và nó sử dụng ping mô-đun.

Các ping mô-đun không cần bất kỳ tùy chọn nào khác. Vì vậy, tôi đã để trống (không có gì sau dấu hai chấm, : )

Sau khi bạn hoàn thành bước này, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Bạn có thể chạy ping_all_hosts.yaml Sách chơi Ansible như sau:

$ansible-playbook-tôilưu trữ sách vở/ping_all_hosts.yaml

Như bạn có thể thấy, tác vụ ping thành công trong tất cả các máy chủ trong tệp kiểm kê.

Tệp cấu hình dễ nhận biết đơn giản

Trong ví dụ trước đó, bạn phải sử dụng -tôi tùy chọn để cho Ansible biết sẽ sử dụng tệp khoảng không quảng cáo nào. Trong trường hợp của tôi, nó là máy chủ tệp hàng tồn kho.

$ansible-playbook-tôilưu trữ sách vở/ping_all_hosts.yaml

Nếu bạn không muốn chuyển tệp kiểm kê với -tôi tùy chọn mỗi khi bạn chạy một playbook Ansible, tất cả những gì bạn phải làm là đặt tệp kiểm kê mặc định cho dự án của mình.

Để làm điều đó, hãy tạo một tệp cấu hình Ansible mới ansible.cfg trong gốc dự án của bạn như sau:

$nanoansible.cfg

Nhập các dòng sau vào ansible.cfg tập tin:

[mặc định]
hàng tồn kho =./máy chủ

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Bạn có thể chạy cùng một playbook Ansible như sau:

$sách vở kịch ansible-playbook/ping_all_hosts.yaml

Như bạn có thể thấy, playbook đang sử dụng máy chủ tệp hàng tồn kho theo mặc định. Bạn vẫn có thể sử dụng -tôi tùy chọn để chỉ định một tệp khoảng không quảng cáo khác, nếu bạn muốn. Ansible rất linh hoạt.

Nhóm các Máy chủ trong Tệp Khoảng không quảng cáo

Cho đến nay, tôi đã chỉ cho bạn cách chạy một tập hợp các tác vụ (playbook) trong tất cả các máy chủ trong tệp kiểm kê. Nhưng điều gì sẽ xảy ra nếu bạn muốn chạy một nhóm tác vụ trong một số máy chủ và một nhóm tác vụ khác trong các máy chủ khác? Bạn có thể nhóm các máy chủ trong tệp kiểm kê và chạy các tác vụ khác nhau trên các nhóm máy chủ.

Trong phần này, tôi sẽ chỉ cho bạn cách nhóm các máy chủ trong tệp kiểm kê và cách làm việc với các nhóm máy chủ.

Đầu tiên, hãy mở tệp kiểm kê máy chủ như sau:

$nanomáy chủ

Nhập các dòng sau vào máy chủ tệp hàng tồn kho:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[centos8]
vm3.nodekite.com
vm4.nodekite.com

Ở đây, tôi đã tạo hai nhóm máy chủ: debian10centos8 .

bên trong debian10 nhóm, tôi có hai máy chủ: vm1.nodekite.comvm2.nodekite.com

bên trong centos8 nhóm, tôi có hai máy chủ: vm3.nodekite.comvm4.nodekite.com

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Bây giờ chúng tôi sẽ tạo một playbook mới ping_debian10_hosts.yaml , sẽ ping các máy chủ như trước đây, nhưng chỉ các máy chủ trong debian10 nhóm chủ nhà.

Tạo một sách vở ping_debian10_hosts.yaml bên trong sách chơi/ thư mục như sau:

$nanosách chơi/ping_debian10_hosts.yaml

Nhập các dòng sau vào ping_debian10_hosts.yaml Sách chơi Ansible:

- máy chủ: debian10
người dùng: ansible
nhiệm vụ:
- tên: Ping tất cả Debian10máy chủ
ping:

Thay vì máy chủ: tất cả , Tôi đã thêm máy chủ: debian10 ở đây. debian10 là nhóm chủ. Playbook này sẽ chỉ chạy trên các máy chủ trong debian10 nhóm chủ nhà.

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Chạy playbook như sau:

$sách vở kịch ansible-playbook/ping_debian10_hosts.yaml

Như bạn có thể thấy, chỉ các máy chủ trong debian10 nhóm máy chủ được ping.

Sử dụng cùng một phương pháp, tạo một playbook khác ping_centos8_hosts.yaml như sau:

$nanosách chơi/ping_centos8_hosts.yaml

Nhập các dòng sau vào ping_centos8_hosts.yaml Sách chơi Ansible:

- máy chủ: centos8
người dùng: ansible
nhiệm vụ:
- tên: Ping tất cả CentOSsố 8máy chủ
ping:

Theo cách tương tự, tôi đã thêm máy chủ: centos8 ở đây. centos8 là nhóm chủ. Playbook này sẽ chỉ chạy trên các máy chủ trong centos8 nhóm chủ nhà.

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Chạy playbook như sau:

$sách vở kịch ansible-playbook/ping_centos8_hosts.yaml

Như bạn có thể thấy, chỉ các máy chủ trong centos8 nhóm máy chủ được ping.

Các loại biến Ansible

Có nhiều loại biến khác nhau trong Ansible. Các loại biến chính là Các biến Sự kiện AnsibleCác biến do người dùng xác định .

Các biến Sự kiện Ansible: Tùy thuộc vào máy chủ mà Ansible đang làm việc, Ansible tạo ra các biến dữ kiện Ansible. Các biến sự kiện chắc chắn chứa thông tin về máy chủ lưu trữ, chẳng hạn như địa chỉ IP, tên máy chủ, tên miền, ngày, giờ, các biến môi trường shell, v.v.

Các biến do người dùng xác định: Đây là các biến tùy chỉnh do người dùng xác định. Bạn có thể chuyển các biến do người dùng xác định từ dòng lệnh hoặc sử dụng tệp khoảng không quảng cáo.

Các biến chủ yếu do người dùng xác định có hai loại: Nhóm biếnBiến máy chủ .

Mức độ ưu tiên có thể thay đổi

Mức độ ưu tiên biến của Ansible là : Biến dòng lệnh > Biến máy chủ > Biến nhóm

Nếu bạn đặt cùng một biến với biến máy chủ và biến nhóm, thì biến máy chủ sẽ được áp dụng.

Tương tự, các biến bạn đặt từ dòng lệnh trong khi chạy playbook sẽ thay thế cả biến máy chủ và biến nhóm.

Làm việc với các biến sự kiện có thể kiểm chứng được

Trong phần này, tôi sẽ chỉ cho bạn cách làm việc với các biến dữ kiện Ansible. Vì vậy, chúng ta hãy bắt đầu!

Bạn có thể liệt kê tất cả các biến Sự kiện Có thể thấy được của các máy chủ trong máy chủ tệp hàng tồn kho như sau:

$ansible tất cả-ucó thể ăn được-NScài đặt

Như bạn có thể thấy, tất cả các biến Ansible Facts được liệt kê ở định dạng JSON. Đó là một danh sách rất dài.

Vì danh sách khá dài, bạn có thể mở nó bằng một chương trình máy nhắn tin, chẳng hạn như ít hơn như sau:

$ansible tất cả-ucó thể ăn được-NScài đặt| ít hơn

Bây giờ, bạn có thể cuộn đầu ra lên, xuống, sang trái và phải theo yêu cầu.

Bạn cũng có thể tìm kiếm các tên biến từ máy nhắn tin. Để làm điều đó, hãy nhấn / trên bàn phím của bạn. Sau đó, nhập chuỗi tìm kiếm ( tên máy chủ trong trường hợp của tôi) và nhấn .

Như bạn có thể thấy, biến dữ kiện Ansible phù hợp với chuỗi tìm kiếm là ansible_hostname . Bạn có thể nhấn n để đi đến trận đấu tiếp theo và P để chuyển đến trận đấu trước đó từ máy nhắn tin. Đây là cách bạn tìm biến dữ kiện Ansible mà bạn cần cho dự án Ansible của mình.

Bây giờ chúng ta hãy xem làm thế nào để truy cập các biến sự kiện Ansible.

Tạo một sách vở mới print_variable1.yaml như sau:

$nanosách chơi/print_variable1.yaml

Nhập các dòng sau vào print_variable1.yaml tập tin:

- máy chủ: tất cả
người dùng: ansible
nhiệm vụ:
- Tên intên máy chủcủa tất cả các máy chủ
gỡ lỗi:
tin nhắn:'{{ansible_hostname}}'

Ở đây, tôi đã thêm một nhiệm vụ In tên máy chủ của tất cả các máy chủ . Nhiệm vụ này sử dụng Ansible gỡ lỗi mô-đun để in thông báo khi playbook chạy.

tin nhắn là tham số bắt buộc duy nhất của gỡ lỗi mô-đun. Các tin nhắn tham số chấp nhận một chuỗi trong dấu ngoặc kép, là thông báo sẽ được in trên bảng điều khiển.

Ở đây, {{tên_biến}} định dạng được sử dụng để truy cập một biến. Trong trường hợp này, {{ansible_hostname}} được sử dụng để in ansible_hostname biến của từng máy chủ trong tệp khoảng không quảng cáo.

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Bạn cũng có thể truy cập vào biến dữ kiện Ansible với tư cách là ansible_facts [tên_biến] . Nên ansible_hostname biến sẽ trở thành ansible_facts [tên máy chủ] .

Chúng tôi có thể viết lại print_variable1.yaml playbook như thế này là tốt. Chúng tôi sẽ nhận được cùng một đầu ra.

- máy chủ: tất cả
người dùng: ansible
nhiệm vụ:
- Tên intên máy chủcủa tất cả các máy chủ
gỡ lỗi:
tin nhắn:'{{ansible_facts [' variable_name ']}} '

Chạy playbook print_variable1.yaml như sau:

$sách vở kịch ansible-playbook/print_variable1.yaml

Như bạn có thể thấy, tên máy chủ của mỗi máy chủ trong tệp kiểm kê được in trên bảng điều khiển.

Bây giờ chúng ta hãy in địa chỉ IPv4 mặc định của từng máy chủ cùng với tên máy chủ. Như bạn có thể thấy, địa chỉ IPv4 mặc định của máy chủ có thể được truy cập bằng cách sử dụng Địa chỉ tài sản của ansible_default_ipv4 sự vật.

Tạo một sách vở mới print_variable2.yaml như sau:

$nanosách chơi/print_variable2.yaml

Nhập các dòng sau vào print_variable2.yaml tập tin:

- máy chủ: tất cả
người dùng: ansible
nhiệm vụ:
- Tên intên máy chủcủa tất cả các máy chủ
gỡ lỗi:
tin nhắn:'{{ansible_hostname}} - {{ansible_default_ipv4.address}}'

Playbook này cũng giống như trước đây. Sự khác biệt duy nhất là biến mới {{ansible_default_ipv4.address}} bên trong tin nhắn tùy chọn của gỡ lỗi mô-đun.

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Chạy print_variable2.yaml playbook như sau:

$sách vở kịch ansible-playbook/print_variable2.yaml

Như bạn có thể thấy, địa chỉ IPv4 mặc định và tên máy chủ của máy chủ được in trên bảng điều khiển.

Vì vậy, đây là cách bạn làm việc với các biến Ansible Facts.

Đặt các biến do người dùng xác định từ Dòng lệnh:

Trong phần này, tôi sẽ chỉ cho bạn cách đặt các biến do người dùng xác định từ dòng lệnh trong khi chạy sách phát Ansible.

Đầu tiên, hãy tạo một playbook mới print_variable3.yaml như sau:

$nanosách chơi/print_variable3.yaml

Nhập các dòng sau vào print_variable3.yaml tập tin:

- máy chủ: tất cả
người dùng: ansible
nhiệm vụ:
- Tên inchỉ huybiến dòng
gỡ lỗi:
tin nhắn:'Chào mừng {{username}}'

Ở đây, tôi đã sử dụng gỡ lỗi mô-đun để in tin nhắn Chào mừng {{username}} . tên tài khoản là một biến sẽ được thay thế khi chúng tôi chạy playbook.

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Chạy playbook print_variable3.yaml như sau:

$ansible-playbook-Và 'tên người dùng = Bob'sách chơi/print_variable3.yaml

GHI CHÚ: Ở đây, -Và tùy chọn được sử dụng để vượt qua một tên tài khoản biến với giá trị Bob vào sách vở print_variable3.yaml từ dòng lệnh.

Như bạn có thể thấy, tin nhắn Chào mừng Bob được in trên bảng điều khiển.

Bây giờ chúng ta hãy khám phá cách chuyển nhiều biến từ dòng lệnh.

Tạo một sách vở mới print_variable4.yaml như sau:

$nanosách chơi/print_variable4.yaml

Nhập các dòng sau vào print_variable4.yaml tập tin:

- máy chủ: tất cả
người dùng: ansible
nhiệm vụ:
- name: In các biến do người dùng xác định
gỡ lỗi:
tin nhắn:'tên người dùng = {{tên người dùng}} http_port = {{http_port}}'

Playbook chắc hẳn rất quen thuộc với bạn ngay bây giờ. Tất cả những gì nó làm là in 2 biến tên tài khoảnhttp_port trên bảng điều khiển.

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Bây giờ bạn có thể vượt qua tên tài khoảnhttp_port biến thành playbook bằng cách sử dụng hai -Và tùy chọn như sau:

$ ansible-playbook-Và 'tên người dùng = Bob' -Và 'http_port = 8080'
sách chơi/print_variable4.yaml

Hoặc, bạn có thể chỉ cần tách các biến bằng một khoảng trắng, như sau:

$ ansible-playbook-Và 'tên người dùng = Bob http_port = 8080'
sách chơi/print_variable4.yaml

Như bạn có thể thấy, tên tài khoảnhttp_port các biến được in trên bảng điều khiển.

Làm việc với các biến nhóm do người dùng xác định

Giả sử bạn muốn thêm một số biến vào một nhóm máy chủ. Hành động này rất dễ thực hiện trong Ansible.

Đầu tiên, hãy mở máy chủ tệp hàng tồn kho như sau:

$nanomáy chủ

Nhập các dòng sau vào của bạn máy chủ tệp hàng tồn kho:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[debian10: vars]
tên người dùng = Lily
http_port =4343
[centos8]
vm3.nodekite.com
vm4.nodekite.com
[centos8: vars]
tên người dùng = Bob
http_port =7878

Như bạn có thể thấy, tôi đã tạo một phần mới [debian10: vars]debian10 nhóm máy chủ và đã thêm các biến ( tên tài khoảnhttp_port ) vì debian10 nhóm chủ nhà ở đó.

Theo cách tương tự, tôi đã tạo một phần mới [centos8: vars]centos8 nhóm máy chủ và đã thêm các biến ( tên tài khoảnhttp_port ) vì centos8 nhóm chủ nhà ở đó.

Sau khi bạn hoàn thành, hãy lưu máy chủ tệp hàng tồn kho bằng cách nhấn + NS theo dõi bởi .

Chạy print_variable4.yaml sách vở như sau:

$sách vở kịch ansible-playbook/print_variable4.yaml

Như bạn có thể thấy, các biến chính xác được chuyển cho từng máy chủ tùy thuộc vào nhóm máy chủ của chúng.

Làm việc với các biến trên máy chủ do người dùng xác định

Trong phần này, tôi sẽ chỉ cho bạn cách đặt biến cho các máy chủ cụ thể trong tệp khoảng không quảng cáo.

Đầu tiên, hãy mở máy chủ tệp hàng tồn kho như sau:

$nanomáy chủ

Để thêm các biến vào một máy chủ cụ thể (giả sử, vm1.nodekite.com ), chỉ cần thêm dấu cách / tab sau tên IP / DNS của máy chủ và nhập các biến của bạn, như thể hiện trong ảnh chụp màn hình bên dưới.

Bạn cũng có thể thêm nhiều biến. Đơn giản chỉ cần tách từng biến bằng một khoảng trắng.

Khi bạn đã hoàn tất, hãy lưu tệp kiểm kê bằng cách nhấn + NS theo dõi bởi .

Chạy print_variable4.yaml sách vở như sau:

$sách vở kịch ansible-playbook/print_variable4.yaml

Như bạn có thể thấy, các biến chỉ được đặt cho vm1.nodekite.com tổ chức. Các máy chủ khác có các biến nhóm được áp dụng cho chúng.

Tạo tệp khoảng không quảng cáo nhanh chóng với phạm vi

Bạn có thể sử dụng phạm vi để nhanh chóng tạo tệp khoảng không quảng cáo Ansible nếu địa chỉ IP máy chủ lưu trữ hoặc tên DNS của bạn nhất quán (nghĩa là có một định dạng cụ thể).

Trong các ví dụ trước đó, tôi đã sử dụng các máy chủ vm1.nodekite.com , vm2.nodekite.com , vm3.nodekite.comvm4.nodekite.com . Thay vì nhập 4 dòng, tôi có thể chỉ cần nhập vm [1: 4] .nodekite.com trong tệp hàng tồn kho.

Để thử nghiệm với các phạm vi, hãy mở máy chủ tệp hàng tồn kho như sau:

$nanomáy chủ

Xóa tất cả các máy chủ và biến khỏi tệp khoảng không quảng cáo.

Bây giờ chúng tôi có thể thay thế vm1.nodekite.comvm2.nodekite.com với vm [1: 2] .nodekite.comdebian10 nhóm chủ nhà như sau.

Theo cách tương tự, chúng ta có thể thay thế vm3.nodekite.comvm4.nodekite.com với vm [3: 4] .nodekite.comcentos8 nhóm chủ nhà.

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Chạy ping_all_hosts.yaml như sau:

$sách vở kịch ansible-playbook/ping_all_hosts.yaml

Như bạn có thể thấy, phạm vi máy chủ đã được mở rộng khi tôi chạy playbook.

Lưu trữ các biến trong các tệp khác nhau

Việc lưu trữ các biến nhóm và biến máy chủ lưu trữ trong cùng một tệp kiểm kê rất dễ dàng. Tuy nhiên, bạn có thể đang tìm kiếm sự linh hoạt hơn. Đặc biệt là khi bạn muốn sử dụng phạm vi trong tệp khoảng không quảng cáo của mình vì bạn không còn có thể đặt biến máy chủ lưu trữ nếu bạn sử dụng phạm vi. Bạn có thể lưu trữ các biến nhóm và biến máy chủ lưu trữ trong các tệp khác nhau. Trong phần này, tôi sẽ chỉ cho bạn cách nó được thực hiện.

Theo mặc định, Ansible tìm kiếm các biến nhóm trong group_vars / các biến thư mục và máy chủ lưu trữ trong host_vars / danh mục.

Vì vậy, hãy tạo group_vars /host_vars / thư mục như sau:

$mkdir -pv {chủ nhà, nhóm}_ai

Để đặt các biến nhóm cho debian10 nhóm máy chủ, tạo một tệp debian10 (giống như tên nhóm) trong group_vars / thư mục như sau:

$nanogroup_vars/debian10

Nhập các biến của bạn như sau:

tên người dùng: Lily
http_port: 4343

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS tiếp theo là Y và .

Theo cách tương tự, để đặt các biến nhóm cho centos8 nhóm máy chủ, tạo một tệp centos8 (giống như tên nhóm) trong group_vars / thư mục như sau:

$nanogroup_vars/centos8

Nhập các biến của bạn như sau:

tên người dùng: Bob
http_port: 7878

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS tiếp theo là Y và .

Chạy print_variable4.yaml playbook như sau:

$sách vở kịch ansible-playbook/print_variable4.yaml

Như bạn có thể thấy, các biến nhóm được đặt chính xác cho từng nhóm máy chủ.

Để đặt các biến máy chủ cho máy chủ vm1.nodekite.com , tạo một tệp vm1.nodekite.com (giống như tên máy chủ hoặc địa chỉ IP) trong host_vars / thư mục như sau:

$nanovm1.nodekite.com

Nhập các biến máy chủ của bạn như sau:

tên người dùng: Alex
http_port: 7788

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS tiếp theo là Y và .

Chạy print_variable4.yaml playbook như sau:

sách vở $ ansible-playbook/print_variable4.yaml
[

Như bạn có thể thấy, các biến máy chủ được đặt chính xác cho máy chủ vm1.nodekite.com .

Làm việc với các vòng lặp trong Ansible

Trong phần này, tôi sẽ hướng dẫn bạn cách sử dụng vòng lặp trong Ansible.

Đầu tiên, hãy tạo một playbook mới loop1.yaml bên trong sách chơi/ thư mục như sau:

$nanosách chơi/loop1.yaml

Nhập các dòng sau vào loop1.yaml sách vở:

- máy chủ: tất cả
người dùng: ansible
nhiệm vụ:
- tên: In danh sách người dùng
gỡ lỗi:
tin nhắn:'Người dùng: {{item}}'
with_items:
- Alex
- Bob
- Hoa loa kèn

Ở đây, tôi có 1 nhiệm vụ in ra danh sách người dùng sử dụng vòng lặp.

Để đặt các giá trị lặp lại cho nhiệm vụ, bạn sử dụng with_items mô-đun. Sau đó, bạn thêm từng giá trị một.

with_items:
- Alex
- Bob
- Hoa loa kèn

Bạn truy cập giá trị của lần lặp hiện tại bằng cách sử dụng bài báo Biến đổi.

gỡ lỗi:
tin nhắn:'Người dùng: {{item}}'

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Chạy loop1.yaml playbook như sau:

$sách vở kịch ansible-playbook/loop1.yaml

Như bạn có thể thấy, nhiệm vụ giống nhau được thực hiện cho từng mục trên mỗi máy chủ. Vì vậy, vòng lặp đang hoạt động.

Làm việc với các điều kiện trong Ansible

Nếu bạn muốn chạy các tác vụ dựa trên các điều kiện nhất định, thì phần này là dành cho bạn.

Để chạy các tác vụ dựa trên điều kiện, bạn có thể sử dụng khi nào mô-đun của Ansible. Hãy để chúng tôi xem một ví dụ về mô-đun này. Đầu tiên, hãy tạo một playbook mới condition1.yaml như sau:

$nanosách chơi/condition1.yaml

Nhập các dòng sau vào condition1.yaml sách vở:

- máy chủ: tất cả
người dùng: ansible
nhiệm vụ:
- name: Chỉ chạy tác vụ này trên Debian
gỡ lỗi:
tin nhắn:'tác vụ này đang chạy trên Debian'
when: ansible_facts['phân bổ']=='Debian'

Ở đây,

ansible_facts [‘phân phối’] == ‘Debian’ được sử dụng để kiểm tra xem phân bổDebian . Tác vụ sẽ chỉ chạy nếu bản phân phối là Debian.

Các ansible_facts [‘phân phối’] được sử dụng để truy cập biến Ansible Facts ansible_distribution . Bạn cũng có thể kiểm tra phiên bản phân phối bằng cách sử dụng ansible_distribution_major_version Biến đổi.

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Chạy condition1.yaml playbook như sau:

$sách vở kịch ansible-playbook/condition1.yaml

Như bạn có thể thấy, tác vụ chỉ chạy trên máy chủ Debian. Tác vụ không chạy trên máy chủ CentOS.

Bạn cũng có thể kiểm tra nhiều điều kiện cùng lúc và chỉ chạy tác vụ nếu tất cả các điều kiện đều đúng. Hãy để chúng tôi xem một ví dụ.

Tạo một sách vở mới condition2.yaml như sau:

$nanosách chơi/condition2.yaml

Nhập các dòng sau vào condition2.yaml tập tin:

- máy chủ: tất cả
người dùng: ansible
nhiệm vụ:
- name: Chỉ chạy tác vụ này trên Debian10
gỡ lỗi:
tin nhắn:'tác vụ này đang chạy trên Debian 10'
when: ansible_facts['phân bổ']=='Debian'
và ansible_facts['Distribution_major_version']=='10'

Ở đây, tác vụ sẽ chỉ chạy nếu bản phân phối là Debian ( ansible_facts [‘phân phối’] == ‘Debian’ ) và phiên bản là 10 ( ansible_facts [‘Distribution_major_version’] == ’10’ ). Nếu cả hai điều kiện đều đúng, thì tác vụ sẽ chạy. Ngược lại, tác vụ sẽ không chạy.

Tôi đã sử dụng từ khóa để kiểm tra xem cả hai điều kiện đều đúng ở đây. Nếu bạn muốn kiểm tra xem bất kỳ điều kiện nào là đúng, thì bạn có thể sử dụng hoặc từ khóa thay thế.

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Chạy playbook condition2.yaml như sau:

$sách vở kịch ansible-playbook/condition2.yaml

Như bạn có thể thấy, tác vụ chỉ chạy trên máy chủ Debian 10.

Hãy để chúng tôi thay đổi sách vở condition2.yaml để chạy tác vụ chỉ trên máy chủ Debian 8 như sau.

Như bạn có thể thấy, tất cả các máy chủ đã bị bỏ qua vì tôi không có bất kỳ máy chủ Debian 8 nào trong tệp kiểm kê.

Làm việc với Mô-đun apt Ansible

Các đúng cách mô-đun của Ansible được sử dụng để cài đặt một gói phần mềm cụ thể trên máy chủ Ubuntu / Debian. Hãy để chúng tôi xem cách sử dụng mô-đun này.

Đầu tiên, hãy tạo một playbook mới apt1.yaml bên trong sách chơi/ thư mục như sau:

$nanosách chơi/apt1.yaml

Nhập các dòng sau vào apt1.yaml sách vở:

- máy chủ: debian10
người dùng: ansible
trở thành sự thật
nhiệm vụ:
- name: Cài đặt apache2
đúng cách:
tên: apache2
trạng thái: mới nhất

Các đúng cách mô-đun chỉ yêu cầu Tên của gói mà bạn muốn cài đặt / nâng cấp / gỡ bỏ và tiểu bang của gói.

Ở đây, tôi đang cố gắng cài đặt apache2 Bưu kiện ( tên: apache2 ) trên máy chủ Debian 10 của tôi. Vì tôi đang cố gắng cài đặt một gói và cũng nâng cấp gói nếu có phiên bản mới, tiểu bang nên là muộn nhất .

tiểu bang cũng chấp nhận các tùy chọn sau:

- không có mặt - Gói sẽ bị gỡ bỏ nếu đã được cài đặt.
- muộn nhất - Gói sẽ được nâng cấp nếu có bản cập nhật. Nếu gói chưa được cài đặt, nó sẽ được cài đặt.
- Món quà - Gói sẽ được cài đặt nếu chưa được cài đặt. Nhưng gói sẽ không được nâng cấp nếu có bản cập nhật.

Lưu ý rằng tôi đã thêm trở thành sự thật trong sách vở. Điều này sẽ cung cấp cho có thể ăn được đặc quyền sudo của người dùng để sửa đổi cấu trúc hệ thống tệp (tức là cài đặt / nâng cấp / gỡ bỏ gói). Không có trở thành sự thật , NS đúng cách mô-đun sẽ không thể cài đặt apache2 Bưu kiện.

Sau khi bạn hoàn thành, hãy lưu playbook bằng cách nhấn + NS theo dõi bởi .

Chạy apt1.yaml playbook như sau:

$sách vở kịch ansible-playbook/apt1.yaml

Như bạn có thể thấy, playbook đã chạy thành công trên máy chủ Debian 10.

Như bạn có thể thấy, apache2 gói được cài đặt trên máy chủ Debian 10 của tôi.

Làm việc với Mô-đun dnf / yum Ansible

Các dnfyum mô-đun của Ansible được sử dụng để cài đặt một gói phần mềm cụ thể trên máy chủ CentOS / RHEL. Bạn có thể sử dụng mô-đun này giống như cách bạn đã làm đúng cách mô-đun trong phần trước của bài viết này.

Cả hai dnfyum các mô-đun chấp nhận các tham số giống nhau. Bạn có thể sử dụng dnf mô-đun trên máy chủ CentOS / RHEL 8 và yum trên CentOS / RHEL 7 trở lên.

Bây giờ chúng ta hãy xem xét một ví dụ về mô-đun này.

Đầu tiên, hãy tạo một playbook mới dnf1.yaml bên trong sách chơi/ thư mục như sau:

$nanosách chơi/dnf1.yaml

Nhập các dòng sau vào dnf1.yaml sách vở:

- máy chủ: centos8
người dùng: ansible
trở thành sự thật
nhiệm vụ:
- tên: Cài đặt gói httpd
dnf:
tên: httpd
trạng thái: mới nhất

Các dnfyum mô-đun chỉ yêu cầu Tên của gói mà bạn muốn cài đặt / nâng cấp / gỡ bỏ và tiểu bang của gói.

Ở đây, tôi đang cố gắng cài đặt httpd Bưu kiện ( tên: httpd ) trên máy chủ CentOS 8 của tôi. Khi tôi đang cố gắng cài đặt một gói và tôi cũng muốn nâng cấp nó nếu có phiên bản mới, tiểu bang nên là muộn nhất .

tiểu bang chấp nhận các tùy chọn sau:

- không có mặt - Gói sẽ bị gỡ bỏ nếu đã được cài đặt.
- muộn nhất - Gói sẽ được nâng cấp nếu có bản cập nhật. Nếu gói chưa được cài đặt, nó sẽ được cài đặt.
- Món quà - Gói sẽ được cài đặt nếu chưa được cài đặt. Nhưng gói sẽ không được nâng cấp nếu có bản cập nhật.

Lưu ý rằng tôi đã thêm trở thành sự thật trong sách vở. Điều này mang lại cho có thể ăn được đặc quyền sudo của người dùng để sửa đổi cấu trúc hệ thống tệp (tức là cài đặt / nâng cấp / gỡ bỏ gói). Không có trở thành sự thật , NS đúng cách mô-đun sẽ không thể cài đặt httpd Bưu kiện.

Sau khi bạn hoàn thành, hãy lưu playbook bằng cách nhấn + NS theo dõi bởi .

Chạy dnf1.yaml playbook như sau:

$sách vở kịch ansible-playbook/dnf1.yaml

Như bạn có thể thấy, playbook đã chạy thành công trên máy chủ CentOS 8.

Làm việc với Mô-đun dịch vụ Ansible

Các Dịch vụ mô-đun của Ansible được sử dụng để bắt đầu, dừng, khởi động lại, kích hoạt (thêm dịch vụ vào khởi động) và vô hiệu hóa (xóa dịch vụ khỏi khởi động) các dịch vụ trong máy chủ của bạn.

Trong các phần trước, tôi đã hướng dẫn bạn cách cài đặt gói máy chủ Apache HTTP bằng Ansible đúng cách , dnfyum các mô-đun. Bây giờ chúng ta hãy đảm bảo rằng dịch vụ máy chủ Apache HTTP đang chạy và đã được thêm vào phần khởi động hệ thống.

Tôi sẽ làm việc với máy chủ Debian 10 của mình. Tuy nhiên, bạn có thể làm việc với máy chủ CentOS 8, nếu bạn muốn. Đơn giản chỉ cần điều chỉnh sổ chơi cho phù hợp.

Đầu tiên, hãy tạo một playbook Ansible mới apt2.yaml như sau:

$nanosách chơi/apt2.yaml

Nhập các dòng sau vào apt2.yaml sách vở:

- máy chủ: debian10
người dùng: ansible
trở thành sự thật
nhiệm vụ:
- name: Cài đặt apache2
đúng cách:
tên: apache2
trạng thái: mới nhất
- name: Khởi động dịch vụ apache2
Dịch vụ:
tên: apache2
trạng thái: bắt đầu
đã bật: Đúng

Ở đây, tôi đã thêm một nhiệm vụ mới, Khởi động dịch vụ apache2 .

tên: apache2 - dịch vụ tôi đang làm là apache2 .

trạng thái: bắt đầu - dịch vụ phải đang chạy.

đã bật: Đúng - dịch vụ phải được thêm vào khi khởi động hệ thống.

Các tiểu bang tham số chấp nhận các giá trị khác.

- tải lại - Dịch vụ phải tải lại các tệp cấu hình.
- khởi động lại - Dịch vụ phải được khởi động lại.
- đã bắt đầu - Dịch vụ phải đang chạy. Nếu dịch vụ không chạy, hãy khởi động dịch vụ.
- dừng lại - Dịch vụ phải được dừng lại. Nếu dịch vụ đang chạy, hãy dừng dịch vụ.

Chạy playbook apt2.yaml như sau:

$sách vở kịch ansible-playbook/apt2.yaml

Như bạn có thể thấy, playbook đã chạy thành công.

Như bạn có thể thấy, apache2 dịch vụ đang chạy trên máy chủ Debian 10 của tôi.

Làm việc với Mô-đun sao chép Ansible

Ansible sao chép mô-đun chủ yếu được sử dụng để sao chép tệp từ máy tính của bạn sang máy chủ từ xa.

Trong phần trước, tôi đã cài đặt máy chủ web Apache 2 trên máy chủ Debian 10 của mình. Bây giờ hãy để chúng tôi sao chép một index.html tệp vào webroot của máy chủ Debian 10.

Đầu tiên, tạo một thư mục mới các tập tin/ như sau:

$mkdir -vcác tập tin

Tạo một tệp mới index.html bên trong các tập tin/ thư mục như sau:

$nanocác tập tin/index.html

Nhập các dòng sau vào index.html tập tin:


< html >
< cái đầu >
< chức vụ >Máy chủ trang web của Ansible</ chức vụ >
</ cái đầu >
< cơ thể người >
< h1 >Chào mừng bạn đến với LinuxHint</ h1 >
< P >Máy chủ web này đã được triển khai với Ansible.</ P >
</ cơ thể người >
</ html >

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Tạo một playbook Ansible mới apt3.yaml như sau:

$nanosách chơi/apt3.yaml

Nhập các dòng sau vào apt3.yaml tập tin:

- máy chủ: debian10
người dùng: ansible
trở thành sự thật
nhiệm vụ:
- name: Cài đặt apache2
đúng cách:
tên: apache2
trạng thái: mới nhất
- name: Sao chép index.html vào máy chủ
sao chép:
src: ../các tập tin/index.html
đích:/ở đâu/www/html/index.html
chế độ: 0644
chủ sở hữu: www-data
nhóm: www-data
- name: Khởi động dịch vụ apache2
Dịch vụ:
tên: apache2
trạng thái: bắt đầu
đã bật: Đúng

Đây, nhiệm vụ Sao chép index.html vào máy chủ sao chép index.html từ các tập tin/ thư mục đến / var / www / html / thư mục của máy chủ Debian 10.

src: ../files/index.html - Đường dẫn tệp nguồn.
đích: /var/www/html/index.html - Đường dẫn tệp đích.
chế độ: 0644 - Các quyền cho người dùng tệp (6 - đọc và ghi), nhóm (4 - đọc) và những người khác (4 - đọc).
chủ sở hữu: www-data - Đặt chủ sở hữu của tệp thành www-data .
nhóm: www-data - Đặt nhóm của tệp thành www-data .

Sau khi bạn hoàn tất, hãy lưu tệp bằng cách nhấn + NS theo dõi bởi .

Chạy apt3.yaml playbook như sau:

$sách vở kịch ansible-playbook/apt3.yaml

Như bạn có thể thấy, nhiệm vụ Sao chép index.html vào máy chủ là thành công.

Như bạn có thể thấy, index.html tệp đã được sao chép vào máy chủ Debian 10.

Như bạn có thể thấy, máy chủ web Debian 10 phục vụ index.html trang mà tôi vừa sao chép vào máy chủ Debian 10.

Vì vậy, đây là những điều cơ bản của Ansible. Bạn có thể tìm hiểu thêm về Ansible bằng cách đọc tài liệu chính thức của Ansible. Cảm ơn bạn đã đọc bài viết này.