Centos7

通過 ansible 使用靜態設置配置 centos-7 網路介面的推薦方法

  • December 2, 2019

我是 ansible 的新手,在Google上搜尋並沒有快速引導我找到正確的解決方案。

使用 ansible 將靜態網路設置分配給 centos-7 主機的“粗略”方式是什麼?我覺得這一定是一個非常普遍的需求——在從 rhel-6 過渡到 rhel-7(即,預設情況下為網路管理器,預設情況下與核心一致的設備命名,systemd)。

在 ansible 之前,我一直在解除安裝網路管理器並通過 /etc/init.d/network-scripts/ifcfg-* 文件手動配置主機——我想我可以使用 ansible_default_ipv4 事實對 ansible 做同樣的事情:

   "ansible_default_ipv4": {
       "address": <snip>,
       "alias": "enp3s0",
       "gateway": <snip>,
       "interface": "enp3s0",
       "macaddress": <snip>,
       "mtu": 1500,
       "netmask": "255.255.255.128",
       "network": <snip>,
       "type": "ether"
   }

Ansible far 太棒了,為此我想確保我不會不必要地反對 ansible 穀物。如果有好的方法可以通過 ansible 管理 network-manager 介導的介面配置,我願意不解除安裝 network-manager …

在對 ansible 更加熟悉之後,我又回到了這個話題——我想我會分享我的解決方案。

首先要注意:NetworkManager 有配置外掛的概念——用於將外部資訊源調整到 NetworkManager 配置中。Redhat 分發了一個名為 ifcfg-rh 的外掛,該外掛試圖將 /etc/sysconfig/network-scripts/ifcfg* 樣式的配置文件改編為 NetworkManager 配置,但是這種方法有很多陷阱……以及 network-scripts/ifcfg * 配置格式從來都不是特別簡單……關於網路腳本文件更改的語義是什麼,以及何時應用新設置,這也很令人困惑。此外,ifcfg-* 類型文件不支持 NetworkManager 支持的所有網路配置。

我發現放棄 ifcfg-rh 外掛並改用 keyfile 外掛更容易、更直接。

在任務/main.yml 中:

---

- name: ensure NetworkManager is configured to use keyfile plugin
 copy: src=NetworkManager.conf dest=/etc/NetworkManager/NetworkManager.conf mode=0600
 notify:
  - restart NetworkManager
  - wait for new network settings

- name: ensure NetworkManager settings are initialized from appropriate keyfile configuration
 copy: src={{ myorg_network_profile }}.conf dest=/etc/NetworkManager/system-connections/ansible_generated.conf mode=0600
 notify:
   - restart NetworkManager
   - reload network interface
   - wait for new network settings

處理程序看起來像這樣:


- name: reload network interface
  shell: nmcli con reload 
- name: restart NetworkManager 
  service: name=NetworkManager state=restarted 
- name: wait for new network settings
  sudo: false 
  local_action: 
     module: wait_for host={{ ansible_ssh_host | default(inventory_hostname) }} port=22 delay=10 timeout=300

使用如下所示的 NetworkManager.conf:

[main]
plugin=keyfile

然後,我創建適合我要部署的各種網路配置的密鑰文件配置文件:

範例:文件/dhcp.conf

[connection]
id=dhcp
uuid=50263651-4f14-46bc-8dd8-818bf0fe3367
type=ethernet
autoconnect=true

[ipv6]
method=auto

[ipv4]
method=auto

或者對於具有靜態網路設置和兩個子網上的 ip 的主機:

[connection]
id=custom-connection-profile
uuid=50263651-4f14-46bc-8dd8-818bf0fe3362
type=ethernet
autoconnect=true

[ipv6]
method=auto

[ipv4]
method=manual
dns=192.168.0.1;192.168.0.x;
dns-search=foo.com;
address1=192.168.0.4/24,192.168.0.1
address2=172.19.0.12/25,172.19.12.1

要將隨機 ip 處新安裝的系統變成具有靜態分配地址的主機:

ansible-playbook site.yml -i hosts.ini --extra_vars "ansible_ssh_host=<ip_address_of_newly_installed_host>" --limit <ansible_hostname_from_inventory>

我認為這是一個很好的方法,但對任何回饋都很高興。

引用自:https://serverfault.com/questions/666579