首页 > 解决方案 > 通过解析 systemd-resolve 输出生成 YAML

问题描述

我正在尝试用 bash 创建 2 个数组。

array1 称为 DNSSERVERS :与所有 DNS 服务器;输出应该是这样的:1.1.1.1,2.2.2.2,3.3.3.3,4.4.4.4

array2 称为 DNSSERVERSSEARCH.with all DNS Domain;输出应该是这样的:local.domain.net,domain.net

所有这些信息来自:systemd-resolve --status.

然后我想把这个数组放到一个名为的 bash 脚本中:bounding-netplan.sh

事情是今天我们有 4 个 DNS 服务器和 2 个 DNS 域。但明天可能是 1 个 DNS 服务器和 4 个 DNS 域。脚本必须灵活。

我试图用awk设置。但没有成功。

任何人都可以帮助我。将不胜感激。

非常感谢您提前。

# systemd-resolve --status
Global
     DNS Servers: 1.1.1.1
                  2.2.2.2
                  3.3.3.3
                  4.4.4.4
      DNS Domain: local.domain.net
                  domain.net
      DNSSEC NTA: 10.in-addr.arpa
                  16.172.in-addr.arpa
                  168.192.in-addr.arpa
                  17.172.in-addr.arpa
                  18.172.in-addr.arpa
                  19.172.in-addr.arpa
                  20.172.in-addr.arpa
                  21.172.in-addr.arpa
                  22.172.in-addr.arpa
                  23.172.in-addr.arpa
                  24.172.in-addr.arpa
                  25.172.in-addr.arpa
                  26.172.in-addr.arpa
                  27.172.in-addr.arpa
                  28.172.in-addr.arpa
                  29.172.in-addr.arpa
                  30.172.in-addr.arpa
                  31.172.in-addr.arpa
                  corp
                  home
                  internal
                  intranet
                  lan
                  local
                  private
                  test

cat bounding-netplan.sh

#!/bin/bash

MAJORRELEASE=$( lsb_release -sr | cut -d\. -f1 )
STROS=$( lsb_release -si )


# Ubuntu 18.04
if [ $STROS == Ubuntu ] && [ $MAJORRELEASE -ge 18 ] ; then
  if [ -d /etc/netplan ]; then
    DNSSERVERS=``
    DNSSERVERSSEARCH=``

    cat <<EOF | tee /etc/netplan/01-netcfg.yaml
network:
   version: 2
   renderer: networkd
   ethernets:
     switchports:
       match: {name: "enp*"}
   bonds:
     bond0:
       interfaces: [switchports]
       addresses: [${IP}]
       gateway4: ${ROUTE}
       nameservers:
         search: [${DNSSERVERSSEARCH}] 
         addresses: [${DNSSERVERS}]
EOF

  fi
fi

标签: arraysbashawkyaml

解决方案


我想在这里找到了一种方法。

$ systemd-resolve --status | sed -e 's#[\t ]##g' | awk -F\: 'BEGIN{section=""}{if($2!=""){section=$1; print $1" "$2}else {print section" "$1}}' | awk '{if($1=="DNSServers") print $2}' | sort -u | tr '\n' ',' | sed -e 's#,$##'
1.1.1.1,2.2.2.2,3.3.3.3,4.4.4.4
$ 

推荐阅读