我正在寻找一种方法来在网络启动时触发将主机的IP地址写入文件/ etc / environment。
现在,我所有的IP都是静态的。我将来也希望他们成为DHCP。
例如:当eth0启动并为其配置了10-eth0.network配置的IP时,ip以某种形式写入/ etc / environment,如
private_ipv4=x.x.x.x
public_ipv4=y.y.y.y
我会考虑其他选项,例如可以从可以执行相同操作的系统服务运行的脚本。如果需要配置,我不介意。例如,告诉它哪个接口和可能的网络前缀被视为公共与私有。
答案 0 :(得分:0)
根据您的发行版,您可以dhclient
进行写作。
请参阅:dhclient(8)
,dhclient-script(8)
和dhclient.conf(5)
您可以编写脚本/etc/dhclient-exit-hooks
,测试BOUND
条件并写下您想要的内容。
答案 1 :(得分:0)
我找到了通过此link找到的解决方案。 如果在cloud-init运行之前这些变量在环境中,coreos-cloud-init似乎将COREOS_PUBLIC_IPV4和COREOS_PRIVATE_IPV4写入/ etc / environment。这个脚本实现了同样的功能,可以简单地复制到/usr/share/oem/cloud-config.yml
#!/bin/sh
workdir=$(mktemp --directory)
trap "rm --force --recursive ${workdir}" SIGINT SIGTERM EXIT
cat << EOF >"${workdir}/cloud-config.yml"
#cloud-config
coreos:
etcd:
discovery:
addr: \\$public_ipv4:4001
peer-addr: \\$private_ipv4:7001
units:
- name: etcd.service
command: start
- name: fleet.service
command: start
EOF
get_ipv4() {
IFACE="${1}"
local ip
while [ -z "${ip}" ]; do
ip=$(ip -4 -o addr show dev "${IFACE}" scope global | gawk '{split ($4, out, "/"); print out[1]}')
sleep .1
done
echo "${ip}"
}
export COREOS_PUBLIC_IPV4=$(get_ipv4 eth0)
export COREOS_PRIVATE_IPV4=$(get_ipv4 eth1)
coreos-cloudinit --from-file="${workdir}/cloud-config.yml"