1.Ansible 中,如何用模塊創建一個文件并設置權限644并設置SELinux類型,如何從受管主機中刪除文件?
使用ansible.builtin集合中的 file 模塊,添加state:touch 創建文件,mode:‘0644’ 設置權限,setype設置SELinux類型,state:absent參數刪除文件。
2.想把本地文件app.conf復制到遠程/etc/app/,用哪個模塊?
copy模塊。
3.copy和fetch模塊核心區別是什么?
copy是控制節點 → 受管主機傳文件;fetch是受管主機 → 控制節點拉文件。
4.要修改遠程文件某一行內容(比如替換old_text為new_text),用什么模塊?
lineinfile模塊
- lineinfile:path: /etc/configregexp: '^old_text'line: 'new_text
5.想修改文件某幾行(比如添加一段配置),用哪個模塊最方便?
blockinfile模塊,可批量插入 / 修改帶標記的文本塊,比lineinfile更適合多行場景。
6.如何檢索受管主機上的文件狀態?
使用stat模塊檢索文件事實,提供檢索文件屬性等功能。
7.如何遞歸同步本地目錄./dist/到遠程/app/,且刪除遠程多余文件?
使用synchronize模塊(基于rsync),加delete:yes實現刪除遠程不存在的文件:
- synchronize:src: ./dist/dest: /app/delete: yes? # 刪除遠程不存在的文件rsync_opts:- "--exclude=.git"? # 可選:排除不需要的文件
8.Jinja2 模板里,{{ var }}和{% code %}有什么區別?
{{ var }}是變量渲染,把變量值替換到模板。{% code %}用于特殊的控制結構或邏輯(如if/for),用來寫循環或條件判斷。
9.Ansible 中,Jinja2 模板文件一般放哪?默認擴展名是啥?
通常放在playbook項目的templates目錄中,.j2為其文件擴展名。
10.模板里想遍歷users列表(如users: [alice, bob]),怎么寫循環?
{% for user in users %}
{{ user }}
{% endfor %}
11. 模板里判斷env變量是否為prod,怎么寫條件?
{% if env == ‘prod’ %}
生產環境配置
{% endif %}
12.怎么用 Ansible 部署 Jinja2 模板到目標主機?
使用 ansible.builtin.template 模塊,如:
tasks:- name: template renderansible.builtin.template:src: /tmp/j2-template.j2dest: /tmp/dest-config-file.txt
13.怎么避免模板文件被手動修改?
為避免其他系統管理員修改ansible管理的文件,應該在ansible.cfg文件中設置ansible_managed=Ansible managed,然后將模板頂部加注釋 {{ ansible_managed }}
14. 模板渲染后內容不對,怎么調試?
用debug模塊輸出生成的內容;檢查變量是否正確傳遞(-vvv看詳細日志)。
15.Jinja2模塊的作用?
Jinja2 模板可以將配置文件的結構和邏輯分離,使得開發人員和運維人員能夠更清晰地理解配置的生成方式。同時,模板可以被多個 Playbook 復用,減少重復代碼的編寫。
例如:團隊中可能存在多個項目都需要部署 Nginx 服務,通過共享 Nginx 配置的 Jinja2 模板,不同的項目只需要根據自身需求定義不同的變量,就可以快速生成符合項目要求的 Nginx 配置文件,提高了開發和運維的效率。
創建一個 Nginx 配置模板(nginx.conf.j2):jinja2
server {listen {{ nginx_port }};server_name {{ server_name }};location / {root /usr/share/nginx/html;index index.html;}
}在 Ansible 的 Playbook 中,通過定義變量 nginx_port 和 server_name ,
就可以為不同的 Nginx 服務器生成定制化的配置文件。yaml
- name: 部署 Nginx 配置hosts: web_serversvars:nginx_port: 8080server_name: "example.com"tasks:- name: 生成 Nginx 配置ansible.builtin.template:src: nginx.conf.j2dest: /etc/nginx/nginx.conf