2015-04-29 38 views
0

我正在尋找一種方法來觸發將主機的IP地址寫入文件/ etc/environment中,一旦網絡啓動。有沒有辦法在文件出現時將接口的ip地址寫入文件?

現在,我所有的IP都是靜態的。我希望將來他們也可以成爲DHCP。

例如:以某種形式在eth0的成爲,並將其分配它是從10-eth0.network配置IP,IP被寫在/ etc /環境,比如

private_ipv4=x.x.x.x 
public_ipv4=y.y.y.y 

我會考慮其他的選擇也許一樣一個可以執行相同的systemd服務的腳本。我不介意它是否需要配置。例如,告訴它哪個接口和可能的網絡前綴被認爲是公共的vs私人的。

+0

您打算如何處理數據?不同的用例可能有更好或更差的解決方案。 –

+0

是的。 CoreOS裸金屬。我想在CoreOS版本的cloud-init中使用它。這在CoreOS上是默認不可用的......我想知道是否有可靠的方法使其工作,而不必在多個地方配置IP。 – Matt

+0

使用這種解決方案的意義何在,您可以始終使用'ip'命令來獲取任何接口的地址? –

回答

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" 
0

根據您的發行版,您可能可以用dhclient來完成寫作。

參見:dhclient(8)dhclient-script(8),並dhclient.conf(5)

您可以編寫腳本/etc/dhclient-exit-hooks,用於測試的BOUND條件,寫你想要什麼。

相關問題