Enrolment failure on enroll subcloud with different OAM subnet address
During subcloud enrollment, default route is always expected to be as set by cloud-init. It is seen sometimes overwritten by OAM ifcfg configuration even before oam-modify triggered. This commit forces cloud-init route back i.e in case of oam- reconfiguration, we are forcing to have default route as given by new configuration through cloud-init, and making sure there is no old default route given by existing oam configuration. This provides OAM connection to subcloud through new OAM configuration at early stage. This also creates temporary file /var/run/.enroll-init-reconfigure, before doing oam-modify, which later checked by network runtime script to restate the default OAM route [1]. [1] https://review.opendev.org/c/starlingx/stx-puppet/+/937800 TEST PLAN: PASS: subcloud enrollment with oam-reconfig with interface change - OAM connection based on cloud-init's new IP/route/interface PASS: subcloud enrollment with oam-reconfig (oam-subnet) with vlan change - OAM connection based on cloud-init's new IP/route/vlan PASS: subcloud enrollment with oam-reconfig w/o interface/vlan change - OAM connection based on cloud-init's new IP/route PASS: subcloud enrollment without oam-reconfig PASS: test above subcloud enrollement with both IPv4 and IPv6 on OAM - check /var/log/cloud-init-output.log output to see oam default route through cloud-init dev before oam-modify triggered - check file created: /var/run/.enroll-init-reconfigure Closes-bug: 2092151 Change-Id: I5b2af5610f43aa8cf76baff64abd94ec7cc411e0 Signed-off-by: Tara Nath Subedi <tara.subedi@windriver.com>
This commit is contained in:
parent
ca412b85c2
commit
d36ac91d90
@ -127,7 +127,6 @@ function load_credentials {
|
|||||||
# in later enrollment steps. For example, a timing issue has been observed
|
# in later enrollment steps. For example, a timing issue has been observed
|
||||||
# because the OAM IP is already available, service endpoint IPs are configured,
|
# because the OAM IP is already available, service endpoint IPs are configured,
|
||||||
# but rerunning the Puppet manifest interferes with enrollment.
|
# but rerunning the Puppet manifest interferes with enrollment.
|
||||||
CURRENT_OAM_IP=""
|
|
||||||
function check_reconfigure_OAM {
|
function check_reconfigure_OAM {
|
||||||
system_mode=$(awk -F= '/system_mode/ {print $2}' /etc/platform/platform.conf)
|
system_mode=$(awk -F= '/system_mode/ {print $2}' /etc/platform/platform.conf)
|
||||||
|
|
||||||
@ -146,7 +145,6 @@ function check_reconfigure_OAM {
|
|||||||
if [ "$system_mode" = "duplex" ]; then
|
if [ "$system_mode" = "duplex" ]; then
|
||||||
# DX: Current system oam values
|
# DX: Current system oam values
|
||||||
oam_c0_ip=$(echo "$oam_show_output" | awk '/oam_c0_ip/ {print $4}')
|
oam_c0_ip=$(echo "$oam_show_output" | awk '/oam_c0_ip/ {print $4}')
|
||||||
CURRENT_OAM_IP=$oam_c0_ip
|
|
||||||
oam_c1_ip=$(echo "$oam_show_output" | awk '/oam_c1_ip/ {print $4}')
|
oam_c1_ip=$(echo "$oam_show_output" | awk '/oam_c1_ip/ {print $4}')
|
||||||
oam_floating_ip=$(echo "$oam_show_output" | awk '/oam_floating_ip/ {print $4}')
|
oam_floating_ip=$(echo "$oam_show_output" | awk '/oam_floating_ip/ {print $4}')
|
||||||
oam_gateway_ip=$(echo "$oam_show_output" | awk '/oam_gateway_ip/ {print $4}')
|
oam_gateway_ip=$(echo "$oam_show_output" | awk '/oam_gateway_ip/ {print $4}')
|
||||||
@ -167,7 +165,6 @@ function check_reconfigure_OAM {
|
|||||||
else
|
else
|
||||||
# SX: Current system oam values
|
# SX: Current system oam values
|
||||||
oam_ip=$(echo "$oam_show_output" | awk '/oam_ip/ {print $4}')
|
oam_ip=$(echo "$oam_show_output" | awk '/oam_ip/ {print $4}')
|
||||||
CURRENT_OAM_IP=$oam_ip
|
|
||||||
oam_gateway_ip=$(echo "$oam_show_output" | awk '/oam_gateway_ip/ {print $4}')
|
oam_gateway_ip=$(echo "$oam_show_output" | awk '/oam_gateway_ip/ {print $4}')
|
||||||
oam_subnet=$(echo "$oam_show_output" | awk '/oam_subnet/ {print $4}')
|
oam_subnet=$(echo "$oam_show_output" | awk '/oam_subnet/ {print $4}')
|
||||||
|
|
||||||
@ -236,6 +233,7 @@ function do_network_cleanup {
|
|||||||
# We need new OAM connection to complete oam-modify, so should not loose OAM connection
|
# We need new OAM connection to complete oam-modify, so should not loose OAM connection
|
||||||
# established by cloud-init. "if_name" interface has new OAM IP configured by cloud-init.
|
# established by cloud-init. "if_name" interface has new OAM IP configured by cloud-init.
|
||||||
#
|
#
|
||||||
|
# Scenario A: OAM reconfiguration with same vlan/interface cloud-init vs OAM
|
||||||
# oam-modify triggers puppet runtime 1) ifdown OAM-label, this deletes old OAM IP and default OAM route
|
# oam-modify triggers puppet runtime 1) ifdown OAM-label, this deletes old OAM IP and default OAM route
|
||||||
# 2) changes ifcfg file and 3) ifup OAM-label, this fails as it has
|
# 2) changes ifcfg file and 3) ifup OAM-label, this fails as it has
|
||||||
# conflict to cloud-init provisioned OAM IP, and the default OAM route
|
# conflict to cloud-init provisioned OAM IP, and the default OAM route
|
||||||
@ -248,12 +246,15 @@ function do_network_cleanup {
|
|||||||
# already down, and won't delete exisiting OAM default route.
|
# already down, and won't delete exisiting OAM default route.
|
||||||
# As end result, after oam-modify, we will still have new IP and default OAM route.
|
# As end result, after oam-modify, we will still have new IP and default OAM route.
|
||||||
#
|
#
|
||||||
|
# Scenario B: OAM reconfiguration with same/different vlan/interface cloud-init vs OAM
|
||||||
|
# There could be default route with old configuration. We always expect default route from cloud-init.
|
||||||
|
#
|
||||||
log_info "Forcing current OAM label interface:$oam_if_label down"
|
log_info "Forcing current OAM label interface:$oam_if_label down"
|
||||||
ifdown_results=$(ifdown ${oam_if_label} --force 2>&1)
|
ifdown_results=$(ifdown ${oam_if_label} --force 2>&1)
|
||||||
log_info "ifdown errors: ${ifdown_results}"
|
log_info "ifdown errors: ${ifdown_results}"
|
||||||
|
|
||||||
# Add the default route back
|
# Add/Replace the cloud-init's default route back
|
||||||
ip_route_results=$(${ip_command} route add default via ${OAM_GATEWAY_IP} dev ${if_name} 2>&1)
|
ip_route_results=$(${ip_command} route replace default via ${OAM_GATEWAY_IP} dev ${if_name} 2>&1)
|
||||||
log_info "ip route add errors: ${ip_route_results}"
|
log_info "ip route add errors: ${ip_route_results}"
|
||||||
|
|
||||||
display_network_info
|
display_network_info
|
||||||
@ -274,6 +275,7 @@ function check_oam_reconfiguration_on_same_interface {
|
|||||||
if [ -f ${cfg} ]; then
|
if [ -f ${cfg} ]; then
|
||||||
iface_line=$( cat ${cfg} |grep ^iface | grep -v 'iface lo' )
|
iface_line=$( cat ${cfg} |grep ^iface | grep -v 'iface lo' )
|
||||||
if_name=$( echo "${iface_line}" | awk '{print $2}' )
|
if_name=$( echo "${iface_line}" | awk '{print $2}' )
|
||||||
|
CLOUD_INIT_OAM_IF_NAME=${if_name}
|
||||||
regex="(vlan[0-9]+)|(.*\..*)"
|
regex="(vlan[0-9]+)|(.*\..*)"
|
||||||
if [[ ${if_name} =~ ${regex} ]]; then
|
if [[ ${if_name} =~ ${regex} ]]; then
|
||||||
vlan_raw_device_line=$( grep vlan-raw-device ${cfg} )
|
vlan_raw_device_line=$( grep vlan-raw-device ${cfg} )
|
||||||
@ -310,7 +312,6 @@ function check_oam_reconfiguration_on_same_interface {
|
|||||||
oam_if_port=$( echo "${oam_if_details}" | awk '{print $3}' | sed -E "s/^\['([^']+)'.*$/\1/" )
|
oam_if_port=$( echo "${oam_if_details}" | awk '{print $3}' | sed -E "s/^\['([^']+)'.*$/\1/" )
|
||||||
log_info "OAM is of ethernet type, port:${oam_if_port}"
|
log_info "OAM is of ethernet type, port:${oam_if_port}"
|
||||||
if [[ ${oam_if_port} == ${if_name} ]] && [[ ${vlan_raw_device} == '' ]] && [[ ${vlan_id} == '' ]]; then
|
if [[ ${oam_if_port} == ${if_name} ]] && [[ ${vlan_raw_device} == '' ]] && [[ ${vlan_id} == '' ]]; then
|
||||||
CLOUD_INIT_OAM_IF_NAME=${if_name}
|
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
# In case of existing OAM interface of vlan type, check if OAM reconfiguration is on same physical interface and vlan-id
|
# In case of existing OAM interface of vlan type, check if OAM reconfiguration is on same physical interface and vlan-id
|
||||||
@ -322,7 +323,6 @@ function check_oam_reconfiguration_on_same_interface {
|
|||||||
check_rc_die $? "OAM vlan raw device parsing failed"
|
check_rc_die $? "OAM vlan raw device parsing failed"
|
||||||
log_info "OAM is of VLAN type, vlan_raw_device:${oam_vlan_raw_device} vlan_id:${oam_vlan_id}"
|
log_info "OAM is of VLAN type, vlan_raw_device:${oam_vlan_raw_device} vlan_id:${oam_vlan_id}"
|
||||||
if [[ ${oam_vlan_raw_device} == ${vlan_raw_device} ]] && [[ ${oam_vlan_id} == ${vlan_id} ]]; then
|
if [[ ${oam_vlan_raw_device} == ${vlan_raw_device} ]] && [[ ${oam_vlan_id} == ${vlan_id} ]]; then
|
||||||
CLOUD_INIT_OAM_IF_NAME=${if_name}
|
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@ -452,15 +452,19 @@ verify_factory_install
|
|||||||
load_credentials
|
load_credentials
|
||||||
check_services_status
|
check_services_status
|
||||||
|
|
||||||
|
# Creating non-persistent flag, which will not survive on reboot.
|
||||||
|
# This flag will be used by apply_network_config.sh, to restate cloud-init configured route over
|
||||||
|
# puppet generated OAM route. This is necessary in case of vlan/interface reconfigured, as this is
|
||||||
|
# done only by cloud-init, and puppet generated ifcfg file does not know about this until reboot.
|
||||||
|
touch /var/run/.enroll-init-reconfigure
|
||||||
|
|
||||||
if check_reconfigure_OAM; then
|
if check_reconfigure_OAM; then
|
||||||
|
# Check directly on ifcfg file, to figure out the label/alias, which works for both IPv4 and IPv6 addresses:
|
||||||
|
current_oam_if_name_with_label=$(grep net:oam /etc/network/interfaces.d/ifcfg-* | grep -oP '(?<=interfaces.d/ifcfg-).*?(?=:stx-description )')
|
||||||
|
log_info "Current OAM IF label (alias):$current_oam_if_name_with_label."
|
||||||
|
|
||||||
if check_oam_reconfiguration_on_same_interface; then
|
if check_oam_reconfiguration_on_same_interface; then
|
||||||
# OAM reconfiguration requested on same interface/vlan as factory-installed OAM interface
|
# OAM reconfiguration requested on same interface/vlan as factory-installed OAM interface
|
||||||
#
|
|
||||||
# ip addr show command doesn't display IPv6 addresses with alias label, so this would work only on IPv4 address:
|
|
||||||
# current_oam_if_name_with_label=$(ip addr show $CLOUD_INIT_OAM_IF_NAME|grep $CURRENT_OAM_IP |grep -oP '\b'$CLOUD_INIT_OAM_IF_NAME'[^\s]*')
|
|
||||||
# Check directly on ifcfg file, to figure out the label/alias, which works for both IPv4 and IPv6 addresses:
|
|
||||||
current_oam_if_name_with_label=$(grep $CURRENT_OAM_IP /etc/network/interfaces.d/ifcfg-* | grep -oP '\b'$CLOUD_INIT_OAM_IF_NAME':[^:]*')
|
|
||||||
log_info "Current OAM IF label (alias):$current_oam_if_name_with_label."
|
|
||||||
|
|
||||||
# Here, reconfiguration is only for address change, which is supported by oam-modify itself.
|
# Here, reconfiguration is only for address change, which is supported by oam-modify itself.
|
||||||
# We still need new OAM connection to complete oam-modify, so should not loose OAM connection
|
# We still need new OAM connection to complete oam-modify, so should not loose OAM connection
|
||||||
@ -468,6 +472,12 @@ if check_reconfigure_OAM; then
|
|||||||
# This new IP provisioned by cloud-init collides with oam-modify triggered puppet oam network
|
# This new IP provisioned by cloud-init collides with oam-modify triggered puppet oam network
|
||||||
# reconfiguration, causing default OAM route missing. To avoid this, we do some cleanup.
|
# reconfiguration, causing default OAM route missing. To avoid this, we do some cleanup.
|
||||||
do_network_cleanup ${CLOUD_INIT_OAM_IF_NAME} ${current_oam_if_name_with_label}
|
do_network_cleanup ${CLOUD_INIT_OAM_IF_NAME} ${current_oam_if_name_with_label}
|
||||||
|
else
|
||||||
|
if [[ ${CLOUD_INIT_OAM_IF_NAME} != "" ]]; then
|
||||||
|
# OAM reconfiguration requested on different interface/vlan than factory-installed OAM interface
|
||||||
|
# Here, we are forcing new cloud-init route to be default.
|
||||||
|
do_network_cleanup ${CLOUD_INIT_OAM_IF_NAME} ${current_oam_if_name_with_label}
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
reconfigure_OAM
|
reconfigure_OAM
|
||||||
|
Loading…
Reference in New Issue
Block a user