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_vars và nhó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