web-dev-qa-db-ja.com

静的IPアドレスのNetplanのスクリプト作成

フォーラムに投稿しましたが、ここでも質問すると思いました。だから、Ubuntu Server 18.04、netplan、.yamlは初めてです。過去にUbuntu Server 16.04を使用して、インストール後のセットアップでサーバーに静的IPをセットアップするためのかなりまともなシェルスクリプトを作成できました。 Ubuntu Server 18.04がnetplanを使用しているため、ネットワーク構成をスクリプト化することはできませんか? .yamlファイルへの書き込みを設定するためにシェルスクリプトを微調整しようとしていましたが、.yamlファイルを編集するときはフォーマットが非常に重要であり、あまり運がありませんでした。 Ansibleはおそらくこれに対する解決策かもしれません、おそらく?しかし、私はまだAnsibleをマスターしていません。ネットプランを使用して静的IPを構成し、.yamlファイルを更新するスクリプトを書いている人はいますか?

1
t3kg33k

@TygerTyありがとうございます。数週間前にフォローアップを投稿するのを忘れました。これは私のために働いた私が思いついたものです:

#!/bin/bash
#
# Creates a backup
cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bk_`date +%Y%m%d%H%M`
# Changes dhcp from 'yes' to 'no'
sed -i "s/dhcp4: yes/dhcp4: no/g" /etc/netplan/01-netcfg.yaml
# Retrieves the NIC information
nic=`ifconfig | awk 'NR==1{print $1}'`
# Ask for input on network configuration
read -p "Enter the static IP of the server in CIDR notation: " staticip 
read -p "Enter the IP of your gateway: " gatewayip
read -p "Enter the IP of preferred nameservers (seperated by a coma if more than one): " nameserversip
echo
cat > /etc/netplan/01-netcfg.yaml <<EOF
network:
  version: 2
  renderer: networkd
  ethernets:
    $nic
      addresses:
        - $staticip
      gateway4: $gatewayip
      nameservers:
          addresses: [$nameserversip]
EOF
Sudo netplan apply
echo "==========================="
echo
1
t3kg33k

これは私にとってはうまくいきますが、現在の構成から静的を生成しています(理由は聞かないでください)。

私のように動的に探すのではなく、静的IPとネットマスクをIPアドレスに置き換えてください。

ネットワークマネージャーも変更できます。

createStaticConnection.sh
------ END_CONFIG=/etc/netplan/01-network-card.yaml
generateAndApply() { Sudo netplan generate Sudo netplan apply }
getInternetInfo() { local INTERNET_INFO=$( ip r | grep default ) printf "%s" "$( echo $INTERNET_INFO | cut -f$1 -d' ' )" }
#static information NAMESERVERS=("1.1.1.1" "1.0.0.1") NETWORK_MANAGER="NetworkManager"
# information that varies IP="$( ip r | grep kernel | cut -f9 -d' ' )" GATEWAY="$( getInternetInfo 3 )" DEVICE_NAME="$( getInternetInfo 5 )" METHOD="$( getInternetInfo 7 )" PREFIX="$( ip r | grep kernel | cut -f1 -d' ' | cut -f2 -d'/' )"
createStaticYAML() { local YAML="network:\n" YAML+=" version: 2\n" YAML+=" renderer: $NETWORK_MANAGER\n" YAML+=" ethernets:\n" YAML+=" $DEVICE_NAME:\n" YAML+=" dhcp4: no\n" YAML+=" addresses: [$IP/$PREFIX]\n" YAML+=" gateway4: $GATEWAY\n" YAML+=" nameservers:\n" YAML+=" addresses: [${NAMESERVERS[0]},${NAMESERVERS[1]}]" printf "%s" "$YAML" }
clearConfigs() { [ -f $END_CONFIG ] && Sudo rm $END_CONFIG }
setYAML() { Sudo echo -e "$(createStaticYAML)" > $END_CONFIG }
clearConfigs setYAML generateAndApply restartNetwork

1
TygerTy