Điểm:5

Làm cách nào tôi có thể ghi đè một playbook var nếu nó được đặt trong host_vars trong Ansible?

lá cờ us

server1 nằm trong nhóm it_servers, nhưng tôi muốn sử dụng ansible_connection: cục bộ. Làm thế nào điều này có thể được thực hiện nếu ansible_connection được định nghĩa trong playbook và host_vars?

--
- máy chủ: it_servers
  lọ:
    ansible_connection: aws_ssm
  vai trò:
    - nginx
    - mysql

Của tôi host_vars/server1.yml tập tin

ansible_connection: cục bộ
Điểm:6
lá cờ br

Hỏi: "Làm cách nào để ghi đè playbook var nếu nó được đặt trong host_vars trong Ansible?"

A: Hãy nhìn vào ưu tiên biến. ưu tiên của chơi vars là 12. Có thêm 10 khả năng ghi đè chơi vars, nhưng không có chương trình nào cho phép bạn ghi đè có chọn lọc một biến cho một máy chủ.

Bạn sẽ phải xóa khai báo của ansible_connection: aws_ssm từ playbook nếu bạn muốn thay đổi nó cho một máy chủ duy nhất. Nơi tốt nhất cho tập đoàn tuyên bố của kết nối là nhóm_vars (ưu tiên 3-7) và nơi tốt nhất để ghi đè group_vars cho một máy chủ duy nhất là host_vars (ưu tiên 8-10). Ví dụ

vỏ> vật chủ mèo
[aws1]
server1 ansible_connection=cục bộ # ưu tiên 8.
máy chủ2
máy chủ3

[aws1:vars]
ansible_connection=aws_ssm # ưu tiên 3.

Có rất nhiều sự kết hợp của host_varsnhóm_vars để đạt được kịch bản này. Nhưng, nếu bạn đặt một biến tại chơi vars (ưu tiên 12) bạn không thể ghi đè nó cho một máy chủ nữa.


biến động

Có thể khai báo biến động. Ví dụ

ansible_connection: "{{ 'cục bộ'
                        nếu inventory_hostname == 'server1'
                        khác
                        'aws_ssm' }}"

Điều này sẽ làm việc ở bất kỳ cấp độ ưu tiên. Nhưng, vì đánh giá lười biếng, nó rất kém hiệu quả. Biến sẽ được đánh giá mỗi khi được tham chiếu.


'Khởi tạo' biến động

Nếu bạn thực sự cần sử dụng biến động, hãy 'khởi tạo' nó để tránh đánh giá lặp lại. Nó có nghĩa là gì? Ví dụ: đã cung cấp khoảng không quảng cáo (bằng YAML để dễ đọc hơn)

vỏ> vật chủ mèo
tất cả các:
  máy chủ:
    máy chủ 1:
      ansible_host: máy chủ cục bộ
      ansible_python_interpreter: /usr/bin/python3.8
    máy chủ2:
      ansible_host: 10.1.0.62
      ansible_user: quản trị viên
      ansible_python_interpreter: /usr/local/bin/python3.8
    máy chủ3:
      ansible_host: 10.1.0.63
      ansible_user: quản trị viên
      ansible_python_interpreter: /usr/local/bin/python3.8
  bọn trẻ:
    may chủ:
      máy chủ:
        máy chủ 1:
        máy chủ2:
        máy chủ3:

vở kịch

- máy chủ: máy chủ
  lọ:
    ansible_connection: "{{ 'cục bộ'
                            nếu inventory_hostname == 'server1'
                            khác
                            'ssh' }}"
  nhiệm vụ:
    - gỡ lỗi:
        msg: "{{ ansible_play_hosts|
                 map('extract', hostvars, 'ansible_connection') }}"
      run_once: đúng
    - gỡ lỗi:
        var: ansible_connection

cho

CHƠI [máy chủ] ************************************************ *******

NHIỆM VỤ [Thu thập thông tin] *********************************************
được rồi: [máy chủ1]
được rồi: [máy chủ2]
được rồi: [máy chủ3]

NHIỆM VỤ [gỡ lỗi] ************************************************ *********
được rồi: [máy chủ1] => 
  msg: '[AnsibleUndefined, AnsibleUndefined, AnsibleUndefined]'

NHIỆM VỤ [gỡ lỗi] ************************************************ *********
được rồi: [máy chủ1] => 
  ansible_connection: địa phương
được rồi: [máy chủ2] => 
  ansible_connection: ssh
được rồi: [máy chủ3] => 
  ansible_connection: ssh

Các kết nối hoạt động như mong đợi, nhưng biến ansible_connection không được bao gồm trong chủ nhà. sử dụng mô-đun set_fact và 'khởi tạo' biến, ví dụ:

    - bộ_thực tế:
        ansible_connection: "{{ ansible_connection }}"
    - gỡ lỗi:
        msg: "{{ ansible_play_hosts|
                 map('extract', hostvars, 'ansible_connection') }}"
      run_once: đúng

cho

NHIỆM VỤ [set_fact] ************************************************ ******
được rồi: [máy chủ1]
được rồi: [máy chủ2]
được rồi: [máy chủ3]

NHIỆM VỤ [gỡ lỗi] ************************************************ *********
được rồi: [máy chủ1] => 
  tin nhắn:
  - địa phương
  - ssh
  - ssh
Điểm:0
lá cờ in
Max

Ansible áp dụng mức độ ưu tiên thay đổi và bạn có thể sử dụng nó. Đây là thứ tự ưu tiên từ ít nhất đến lớn nhất (các biến được liệt kê cuối cùng sẽ ghi đè lên tất cả các biến khác):

giá trị dòng lệnh (ví dụ: -u my_user, đây không phải là biến)

vai trò mặc định (được xác định trong vai trò/mặc định/main.yml) 1

tệp khoảng không quảng cáo hoặc nhóm tập lệnh vars 2

nhóm hàng tồn kho_vars/tất cả 3

playbook group_vars/cả 3

nhóm hàng tồn kho_vars/* 3

playbook group_vars/* 3

tệp khoảng không quảng cáo hoặc máy chủ tập lệnh vars 2

khoảng không quảng cáo host_vars/* 3

playbook host_vars/* 3

sự kiện lưu trữ / bộ nhớ cache set_facts 4

chơi vars

chơi vars_prompt

chơi vars_files

vai trò vars (được xác định trong vai trò/vars/main.yml)

khối vars (chỉ dành cho các tác vụ trong khối)

nhiệm vụ vars (chỉ dành cho nhiệm vụ)

bao gồm_vars

set_facts / vars đã đăng ký

tham số vai trò (và bao gồm_role)

bao gồm thông số

các lọ bổ sung (ví dụ: -e "user=my_user")(luôn được ưu tiên)

Điều này được giải thích tốt hơn ở đây: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-nên-i-put-a-variable

Điểm:0
lá cờ in

Bạn có thể dùng ủy nhiệm_to: máy chủ cục bộ cho nhiệm vụ.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.