@@ -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,9 @@ 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
+ my $manage_dns = ($nm_main_cfg -> {dns } eq ' none' ) ? 0 : 1;
869
872
my $dgw = $nwtree -> {default_gateway };
870
873
if (!$dgw ) {
871
874
$self -> warn (" No default gateway configured" );
@@ -949,17 +952,19 @@ sub Configure
949
952
# 3. (re)start things
950
953
my $nwsrv = CAF::Service-> new([' NetworkManager' ], log => $self );
951
954
955
+ if ( scalar keys %$nm_main_cfg gt 0 ) {
956
+ $self -> nm_create_main_config_dropin($nm_main_cfg , $nwsrv );
957
+ } else {
958
+ $self -> cleanup($NM_MAIN_DROPIN_CFG_FILE );
959
+ }
952
960
# NetworkManager device configuration, if defined.
953
961
my $nm_device_cfg = $nwtree -> {device_config };
954
- if ($nm_device_cfg ){
962
+ if (scalar keys % $nm_device_cfg gt 0 ){
955
963
$self -> nm_create_device_config_dropin($nm_device_cfg , $nwsrv );
956
964
} else {
957
965
$self -> cleanup($NM_DEVICE_DROPIN_CFG_FILE );
958
966
}
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
-
967
+
963
968
my $dnsconfig = $self -> generate_nm_resolver_config($nwtree , $manage_dns );
964
969
$exifiles -> {$NM_RESOLV_YML } = $self -> nmstate_file_dump($NM_RESOLV_YML , $dnsconfig );
965
970
# nmstate files are applied uinsg nmstate apply via this component. We don't want nmstate svc to manage it.
@@ -985,7 +990,7 @@ sub Configure
985
990
986
991
# Save/Restore last known working (i.e. initial) /etc/resolv.conf
987
992
# if nm is allowed to manage dns, then this should be allowed to have changed
988
- if (!$manage_dns ) {
993
+ if (! $manage_dns ) {
989
994
$resolv_conf_fh -> close ();
990
995
}
991
996
0 commit comments