@@ -34,7 +34,7 @@ Readonly my $NMSTATECTL => '/usr/bin/nmstatectl';
3434Readonly my $NMCLI_CMD => ' /usr/bin/nmcli' ;
3535# pick a config name for nmstate yml to configure dns-resolver: settings. if manage_dns=true
3636Readonly 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" ;
3838Readonly my $NM_DEVICE_DROPIN_CFG_FILE => " /etc/NetworkManager/conf.d/89-device-quattor.conf" ;
3939
4040# generate the correct fake yaml boolean value so TextRender can convert it in a yaml boolean
@@ -83,29 +83,7 @@ sub is_valid_interface
8383 };
8484}
8585
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
10987sub nm_create_device_config_dropin
11088{
11189 my ($self , $nm_device_config , $nwsrv ) = @_ ;
@@ -117,12 +95,35 @@ sub nm_create_device_config_dropin
11795 };
11896
11997 $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+ };
120105 }
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+ };
126127 };
127128}
128129
@@ -865,7 +866,11 @@ sub Configure
865866 my $nwtree = $config -> getTree($NETWORK_PATH );
866867
867868 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;
869874 my $dgw = $nwtree -> {default_gateway };
870875 if (!$dgw ) {
871876 $self -> warn (" No default gateway configured" );
@@ -949,17 +954,19 @@ sub Configure
949954 # 3. (re)start things
950955 my $nwsrv = CAF::Service-> new([' NetworkManager' ], log => $self );
951956
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+ }
952962 # NetworkManager device configuration, if defined.
953963 my $nm_device_cfg = $nwtree -> {device_config };
954- if ($nm_device_cfg ){
964+ if (scalar keys % $nm_device_cfg gt 0 ){
955965 $self -> nm_create_device_config_dropin($nm_device_cfg , $nwsrv );
956966 } else {
957967 $self -> cleanup($NM_DEVICE_DROPIN_CFG_FILE );
958968 }
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+
963970 my $dnsconfig = $self -> generate_nm_resolver_config($nwtree , $manage_dns );
964971 $exifiles -> {$NM_RESOLV_YML } = $self -> nmstate_file_dump($NM_RESOLV_YML , $dnsconfig );
965972 # nmstate files are applied uinsg nmstate apply via this component. We don't want nmstate svc to manage it.
0 commit comments