web-dev-qa-db-fra.com

Script de Netplan pour une adresse IP statique

J'ai posté dans le forum mais je pensais que je demanderais ici aussi. Je suis donc nouveau sur Ubuntu Server 18.04, netplan et .yaml. Auparavant, en utilisant Ubuntu Server 16.04, je pouvais créer un script Shell assez décent pour configurer une adresse IP statique sur un serveur dans une configuration post-installation. N'est-il pas possible de créer un script pour la configuration du réseau maintenant qu'Ubuntu Server 18.04 utilise netplan? J'essayais de modifier mon script Shell pour configurer l'écriture dans le fichier .yaml, mais il semble que le formatage est crucial lors de l'édition d'un fichier .yaml et je n'avais pas beaucoup de chance. Il semble que Ansible pourrait peut-être être une solution pour cela, éventuellement? Mais je n'ai pas encore maîtrisé Ansible. Quelqu'un d'autre a de la chance d'écrire un script pour configurer une adresse IP statique à l'aide de netplan et mettre à jour le fichier .yaml?

1
t3kg33k

@TygerTy Merci pour cela. J'ai oublié de poster un suivi il y a quelques semaines. Voici ce que j'ai trouvé qui a fonctionné pour moi:

#!/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

Cela fonctionne pour moi, bien que je génère un statique à partir de la configuration actuelle (ne demandez pas pourquoi).

Remplacez simplement l'adresse IP de votre adresse IP statique et de votre masque de réseau au lieu de la rechercher dynamiquement comme je le fais.

Vous pouvez également changer le gestionnaire de réseau.

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