我想在 Ubuntu netplan yaml 檔案中將 DNS IP 地址從 192.168.86.14 更改為 192.168.86.16:
link: ens3
addresses: [192.168.86.12/24]
gateway4: 192.168.86.1
nameservers:
addresses: [192.168.86.14,8.8.8.8,8.8.4.4]
這是我的ansible劇本:
- name: test
ansible.builtin.replace:
path: /etc/netplan/00-installer-config.yaml
regexp: '(addresses: \[) 192.168.86.14,'
replace: '\1192.168.86.16,'
我的劇本沒有改變檔案中的任何內容。試圖逃避逗號,但也不匹配任何東西。
出于某種原因,我需要確保 IP 地址在“地址 [”和“”之間,所以我不能只使用這樣的語法:
- name: test
ansible.builtin.replace:
path: /etc/netplan/00-installer-config.yaml
regexp: '192.168.86.14'
replace: '192.168.86.16'
我對 Ansible 很陌生,感謝任何幫助!
uj5u.com熱心網友回復:
字典在 YAML 中是不可變的。但是,您可以在 Jinja2 中更新字典。讓我們以一個完整的 netplan 組態檔為例,例如
shell> cat 00-installer-config.yaml
network:
version: 2
renderer: networkd
ethernets:
ens3:
mtu: 9000
enp3s0:
link: ens3
addresses: [192.168.86.12/24]
gateway4: 192.168.86.1
nameservers:
addresses: [192.168.86.14,8.8.8.8,8.8.4.4]
將字典讀入變數
- include_vars:
file: 00-installer-config.yaml
name: netplan_conf
給
netplan_conf:
network:
ethernets:
enp3s0:
addresses:
- 192.168.86.12/24
gateway4: 192.168.86.1
link: ens3
nameservers:
addresses:
- 192.168.86.14
- 8.8.8.8
- 8.8.4.4
ens3:
mtu: 9000
renderer: networkd
version: 2
創建一個更新名稱服務器的模板
shell> cat 00-installer-config.yaml.j2
{% set _dummy = netplan_conf.network.ethernets.enp3s0.nameservers.update({'addresses': _addresses}) %}
{{ netplan_conf|to_nice_yaml }}
下面的任務
- template:
src: 00-installer-config.yaml.j2
dest: 00-installer-config.yaml
vars:
_addresses: "{{ netplan_conf.network.ethernets.enp3s0.nameservers.addresses|
regex_replace('192.168.86.14', '192.168.86.16') }}"
將更新組態檔
shell> cat 00-installer-config.yaml
network:
ethernets:
enp3s0:
addresses:
- 192.168.86.12/24
gateway4: 192.168.86.1
link: ens3
nameservers:
addresses:
- 192.168.86.16
- 8.8.8.8
- 8.8.4.4
ens3:
mtu: 9000
renderer: networkd
version: 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411025.html
標籤:
上一篇:以下運算式的正則運算式
下一篇:正則運算式拼圖
