Câu hỏi về kết nối Ansible với máy chủ từ xa


8

Tôi muốn hỏi một số câu hỏi về làm việc của Ansible.

1 - Shell nào Ansible sử dụng khi đăng nhập vào máy chủ từ xa?

https://askubfox.com/questions/937354/track-logins-ADE-via-non-interactive-shells/937716?noredirect=1#comment1486867_937716

2 - Nếu tôi có 10 tác vụ trong một cuốn sách, thì có thể thực hiện kết nối 10 lần với máy chủ từ xa HOẶC sử dụng một kết nối duy nhất để thực hiện tất cả 10 tác vụ này?

3 - Nếu tôi đang chạy 10 tác vụ trên 2 máy chủ,

Nó sẽ thực hiện nhiệm vụ đầu tiên trên máy chủ 1 và sau đó trên máy chủ 2 rồi nhiệm vụ thứ hai trên máy chủ 1 và sau đó trên máy chủ 2, ... Sớm,

.

Vì vậy, ở đây cũng kết nối vẫn tồn tại cho cả hai máy chủ?

HOẶC LÀ

Đầu tiên nó có kết nối với máy chủ 1, chạy tác vụ 1 và sau đó ngắt kết nối VÀ sau đó kết nối với máy chủ 2, chạy tác vụ 1 và sau đó ngắt kết nối không?


1
Nói chung, nền tảng Stack Exchange hoạt động tốt nhất nếu bạn chỉ hỏi một câu hỏi cho mỗi ... câu hỏi.
Xiong Chiamiov

Vâng thực sự! Nhưng vì đây là những câu hỏi nhỏ và liên quan đến một chủ đề duy nhất, tôi đã kết hợp chúng.
luv.preet

Vui lòng không kết hợp các câu hỏi trong tương lai, điều này khiến việc trả lời và đọc toàn bộ bộ Hỏi & Đáp trở nên khó khăn hơn. Câu hỏi 1 không thực sự liên quan đến hai câu hỏi còn lại.
RichVel

Câu trả lời:


7

Không thể trả lời 1 (Tôi luôn nghĩ rằng nó chỉ sử dụng mặc định / bin / sh trừ khi được chỉ định khác?).

  1. Nó sẽ làm cho kết nối hơn 10 lần. Một tác vụ đơn thường sẽ có kết nối SCP hoặc SFTP để sao chép tệp tác vụ sẽ được thực thi từ xa, sau đó kết nối khác để kích hoạt tập lệnh. Bạn có thể theo dõi điều này xảy ra bằng cách chạy playbook của bạn với -vvv, chẳng hạn như:

    ansible-playbook deploy_app.yml -u maplebird -vvv
    

    Độ dài của cấp độ 3 cho thấy tất cả các kết nối đến máy khách.

  2. Theo mặc định, Ansible sẽ thực hiện đồng thời các tác vụ trên tất cả các máy chủ lên đến số lượng nhánh được cấu hình tối đa. Vì vậy, nó sẽ chạy tác vụ 1 trên cả hai máy chủ, sau đó nó sẽ chạy tác vụ 2 trên cả hai máy chủ, v.v ... Fork được định nghĩa trong ansible.cfg và mặc định là 5. Thay đổi biến này thành số cao hơn hoặc nhận xét:

    forks = 5
    

    Tùy chọn, bạn cũng có thể thực hiện một đợt lăn khi chạy Playbook bằng cách chỉ định serialtùy chọn trong playbook. Điều này sẽ chỉ thực hiện đồng thời các tác vụ cho nhiều máy chủ mà bạn đã xác định.

    Giả sử bạn đang chạy một playbook với 5 máy chủ và có tùy chọn nối tiếp được đặt. Với serial = 1, nó sẽ chạy toàn bộ máy chủ playbook 1 tại một thời điểm. Với serial = 2, nó sẽ chạy máy chủ 1 & 2, sau đó lưu trữ 2 & 3, sau đó lưu trữ 5. Ví dụ:

    name: deploy to all webservers
    hosts: webservers
    serial: 2
    roles:
       - deploy_application
    

Đọc thêm:

Playbook nối tiếp (cán) chạy:

Nĩa:

Hi vọng điêu nay co ich.


2
IIRC, ansiblesử dụng sshghép kênh, vì vậy không phải nó chỉ là một kết nối đến một máy chủ từ xa cho tất cả các tác vụ?
heemayl

3

(1) Vỏ nào Ansible sử dụng?

Ansible sử dụng /bin/shtheo mặc định. Trên nhiều hệ thống * nix bao gồm RHEL / CentOS, /bin/shbash- tuy nhiên, trên Ubuntu / Debian nódash mà là nhiều hơn nữa cơ bản.

Sử dụng bash Ansible

Có thể thay đổi điều này với executable = /bin/bashtùy chọn cấu hình trong ansible.cfg và cũng có thể đặt ansible_shell_type trong kho.

Nhưng trong thực tế (trên Ansible 2.2.2 trở lên) tôi và những người khác đã thấy rằng cài đặt executabletrong ansible.cfgkhông hoạt động (dù ở becomechế độ hay không).

Một cách tiếp cận hoạt động tốt, nhưng có nghĩa là thêm một chút mã cho mỗi tác vụ, là viết điều này:

- shell:
    echo hello from $0
  args:
    executable: /bin/bash

Điều này sẽ nói hello from /bin/bash, chỉ ra vỏ là chính xác.

Nếu bạn cần phải sử dụng rvm, rbenv, pyenvhoặc tương tự công cụ mà đòi hỏi một trước source ~/.bash_profile(như với một vỏ tương tác), bạn sẽ cần phải sử dụng một kịch bản wrapper hoặc invoke bash trong nhiệm vụ vỏ .


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.