有没有办法在文件出现时将接口的ip-address写入文件?

时间:2015-04-29 02:49:20

标签: systemd

我正在寻找一种方法来在网络启动时触发将主机的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

我会考虑其他选项,例如可以从可以执行相同操作的系统服务运行的脚本。如果需要配置,我不介意。例如,告诉它哪个接口和可能的网络前缀被视为公共与私有。

2 个答案:

答案 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"
相关问题