Ben*_*Ben 8 ansible rhel7 centos7
我是 ansible 的新手,一点点谷歌搜索并没有让我很快找到我的问题的正确解决方案。
使用 ansible 将静态网络设置分配给 centos-7 主机的“with the Grain”方式是什么?我觉得这一定是一个非常普遍的需求——而且一定有很多人对在从 rhel-6 到 rhel-7(即, 默认情况下为 network-manager,默认情况下来自内核 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"
}
Run Code Online (Sandbox Code Playgroud)
Ansible far 非常棒,为此我想确保我不会不必要地反对 ansible 谷物。如果有通过ansible管理网络管理器介导的接口配置的好方法,我愿意不卸载网络管理器...
在对 ansible 更加熟悉之后,我又回到了这个话题——我想我会分享我的解决方案。
首先要注意的是:NetworkManager 具有配置插件的概念——用于将外部信息源调整到 NetworkManager 配置中。Redhat 分发了一个名为 ifcfg-rh 的插件,它试图将 /etc/sysconfig/network-scripts/ifcfg* 样式的配置文件改编为 NetworkManager 配置,但是这种方法有很多问题......以及 network-scripts/ifcfg * 配置格式从来都不是特别简单......它对于网络脚本文件更改的语义是什么也很困惑——以及什么时候会应用新的设置。此外,ifcfg-* 类型文件不支持 NetworkManager 支持的所有网络配置。
我发现放弃 ifcfg-rh 插件并使用密钥文件插件更容易和更直接。
在 tasks/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
Run Code Online (Sandbox Code Playgroud)
处理程序看起来像这样:
- 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
Run Code Online (Sandbox Code Playgroud)
使用如下所示的 NetworkManager.conf:
[main]
plugin=keyfile
Run Code Online (Sandbox Code Playgroud)
然后,我创建适合我要部署的各种网络配置的密钥文件配置文件:
示例:文件/dhcp.conf
[connection]
id=dhcp
uuid=50263651-4f14-46bc-8dd8-818bf0fe3367
type=ethernet
autoconnect=true
[ipv6]
method=auto
[ipv4]
method=auto
Run Code Online (Sandbox Code Playgroud)
或者对于具有静态网络设置和两个子网上的 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
Run Code Online (Sandbox Code Playgroud)
要将一个新安装的随机 ip 系统转换为具有静态分配地址的主机:
ansible-playbook site.yml -i hosts.ini --extra_vars "ansible_ssh_host=<ip_address_of_newly_installed_host>" --limit <ansible_hostname_from_inventory>
Run Code Online (Sandbox Code Playgroud)
我认为这是一个很好的方法,但很高兴收到任何反馈。
| 归档时间: |
|
| 查看次数: |
21561 次 |
| 最近记录: |