@@ -34,7 +34,7 @@ Readonly my $NMSTATECTL => '/usr/bin/nmstatectl';
34
34
Readonly my $NMCLI_CMD => ' /usr/bin/nmcli' ;
35
35
# pick a config name for nmstate yml to configure dns-resolver: settings. if manage_dns=true
36
36
Readonly my $NM_RESOLV_YML => " /etc/nmstate/resolv.yml" ;
37
- Readonly my $NM_DROPIN_CFG_FILE => " /etc/NetworkManager/conf.d/90-quattor.conf" ;
37
+ Readonly my $NM_MAIN_DROPIN_CFG_FILE => " /etc/NetworkManager/conf.d/90-quattor.conf" ;
38
38
Readonly my $NM_DEVICE_DROPIN_CFG_FILE => " /etc/NetworkManager/conf.d/89-device-quattor.conf" ;
39
39
40
40
# generate the correct fake yaml boolean value so TextRender can convert it in a yaml boolean
@@ -83,29 +83,7 @@ sub is_valid_interface
83
83
};
84
84
}
85
85
86
- # By default, NetworkManager on Red Hat Enterprise Linux (RHEL) 8+ dynamically updates the /etc/resolv.conf
87
- # file with the DNS settings from active NetworkManager connection profiles. we manage this using ncm-resolver.
88
- # so disable this unless manage_dns = true. resolver details can be set using nmstate but not doing this now.
89
- sub disable_nm_manage_dns
90
- {
91
- my ($self , $manage_dns , $nwsrv ) = @_ ;
92
- my @data = (' [main]' );
93
-
94
- if ( $manage_dns ) {
95
- # set nothing, will use default.
96
- $self -> verbose(" Networkmanager defaults will be used" );
97
- } else {
98
- push @data , ' dns=none' ;
99
- $self -> verbose(" Configuring networkmanager not to manage dns" );
100
- }
101
- my $fh = CAF::FileWriter-> new($NM_DROPIN_CFG_FILE , mode => oct (444), log => $self , keeps_state => 1);
102
- print $fh join (" \n " , @data , ' ' );
103
- if ($fh -> close ()) {
104
- $self -> info(" File $NM_DROPIN_CFG_FILE changed, reload network" );
105
- $nwsrv -> reload();
106
- };
107
- }
108
-
86
+ # manage NetworkManager [device] settings
109
87
sub nm_create_device_config_dropin
110
88
{
111
89
my ($self , $nm_device_config , $nwsrv ) = @_ ;
@@ -117,12 +95,35 @@ sub nm_create_device_config_dropin
117
95
};
118
96
119
97
$self -> verbose(" setting device configuration dropin" );
98
+
99
+ my $fh = CAF::FileWriter-> new($NM_DEVICE_DROPIN_CFG_FILE , mode => oct (444), log => $self );
100
+ print $fh join (" \n " , @data , ' ' );
101
+ if ($fh -> close ()) {
102
+ $self -> info(" File $NM_DEVICE_DROPIN_CFG_FILE changed, reload network" );
103
+ $nwsrv -> reload();
104
+ };
120
105
}
121
- my $fh = CAF::FileWriter-> new($NM_DEVICE_DROPIN_CFG_FILE , mode => oct (444), log => $self );
122
- print $fh join (" \n " , @data , ' ' );
123
- if ($fh -> close ()) {
124
- $self -> info(" File $NM_DEVICE_DROPIN_CFG_FILE changed, reload network" );
125
- $nwsrv -> reload();
106
+ }
107
+
108
+ # manage NetworkManager [main] settings
109
+ sub nm_create_main_config_dropin
110
+ {
111
+ my ($self , $nm_main_config , $nwsrv ) = @_ ;
112
+ my @data = (' [main]' );
113
+
114
+ if ( scalar keys %$nm_main_config gt 0 ) {
115
+ foreach my $key (sort keys %$nm_main_config ){
116
+ push @data , $key ." =" .$nm_main_config -> {$key };
117
+ };
118
+
119
+ $self -> verbose(" setting NetworkManager main configuration dropin" );
120
+
121
+ my $fh = CAF::FileWriter-> new($NM_MAIN_DROPIN_CFG_FILE , mode => oct (444), log => $self );
122
+ print $fh join (" \n " , @data , ' ' );
123
+ if ($fh -> close ()) {
124
+ $self -> info(" File $NM_MAIN_DROPIN_CFG_FILE changed, reload network" );
125
+ $nwsrv -> reload();
126
+ };
126
127
};
127
128
}
128
129
@@ -865,7 +866,11 @@ sub Configure
865
866
my $nwtree = $config -> getTree($NETWORK_PATH );
866
867
867
868
my $hostname = $nwtree -> {realhostname } || " $nwtree ->{hostname}.$nwtree ->{domainname}" ;
868
- my $manage_dns = $nwtree -> {manage_dns } || 0;
869
+ # NetworkManager main configuration
870
+ my $nm_main_cfg = $nwtree -> {main_config };
871
+ # set to none if main_config/dns is not defined.
872
+ my $main_cfg_dns = $nm_main_cfg -> {dns } || ' none' ;
873
+ my $manage_dns = ($main_cfg_dns eq ' none' ) ? 0 : 1;
869
874
my $dgw = $nwtree -> {default_gateway };
870
875
if (!$dgw ) {
871
876
$self -> warn (" No default gateway configured" );
@@ -949,17 +954,19 @@ sub Configure
949
954
# 3. (re)start things
950
955
my $nwsrv = CAF::Service-> new([' NetworkManager' ], log => $self );
951
956
957
+ if ( scalar keys %$nm_main_cfg gt 0 ) {
958
+ $self -> nm_create_main_config_dropin($nm_main_cfg , $nwsrv );
959
+ } else {
960
+ $self -> cleanup($NM_MAIN_DROPIN_CFG_FILE );
961
+ }
952
962
# NetworkManager device configuration, if defined.
953
963
my $nm_device_cfg = $nwtree -> {device_config };
954
- if ($nm_device_cfg ){
964
+ if (scalar keys % $nm_device_cfg gt 0 ){
955
965
$self -> nm_create_device_config_dropin($nm_device_cfg , $nwsrv );
956
966
} else {
957
967
$self -> cleanup($NM_DEVICE_DROPIN_CFG_FILE );
958
968
}
959
-
960
- # NetworkManager manages dns by default, but we manage dns with e.g. ncm-resolver, new option to enable/disable it.
961
- $self -> disable_nm_manage_dns($manage_dns , $nwsrv );
962
-
969
+
963
970
my $dnsconfig = $self -> generate_nm_resolver_config($nwtree , $manage_dns );
964
971
$exifiles -> {$NM_RESOLV_YML } = $self -> nmstate_file_dump($NM_RESOLV_YML , $dnsconfig );
965
972
# nmstate files are applied uinsg nmstate apply via this component. We don't want nmstate svc to manage it.
@@ -985,7 +992,7 @@ sub Configure
985
992
986
993
# Save/Restore last known working (i.e. initial) /etc/resolv.conf
987
994
# if nm is allowed to manage dns, then this should be allowed to have changed
988
- if (!$manage_dns ) {
995
+ if (! $manage_dns ) {
989
996
$resolv_conf_fh -> close ();
990
997
}
991
998
0 commit comments