Skip to content

Commit c7a9233

Browse files
authored
Merge pull request sonic-net#66 from mssonicbld/sonicbld/202205-merge
[code sync] Merge code from sonic-net/sonic-buildimage:202205 to 202205
2 parents 9b25536 + 9ad97a7 commit c7a9233

File tree

14 files changed

+139
-43
lines changed

14 files changed

+139
-43
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
CONSOLE_PORT=0x2f8
22
CONSOLE_DEV=1
33
CONSOLE_SPEED=9600
4-
ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="module_blacklist=gpio_ich"
4+
ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="module_blacklist=gpio_ich processor.max_cstate=1 intel_idle.max_cstate=0"

dockers/docker-snmp/snmpd.conf.j2

+26-2
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,36 @@
1313
# AGENT BEHAVIOUR
1414
#
1515

16-
# Listen for connections on all ip addresses, including eth0, ipv4 lo
16+
# Listen for connections on all ip addresses, including eth0, ipv4 lo for multi-asic platform
17+
# Listen on managment and loopback0 ips for single asic platform
1718
#
19+
{% macro protocol(ip_addr) %}
20+
{%- if ip_addr|ipv6 -%}
21+
{{ 'udp6' }}
22+
{%- else -%}
23+
{{ 'udp' }}
24+
{%- endif -%}
25+
{% endmacro %}
26+
1827
{% if SNMP_AGENT_ADDRESS_CONFIG %}
1928
{% for (agentip, port, vrf) in SNMP_AGENT_ADDRESS_CONFIG %}
20-
agentAddress {{ agentip }}{% if port %}:{{ port }}{% endif %}{% if vrf %}%{{ vrf }}{% endif %}{{ "" }}
29+
agentAddress {{ protocol(agentip) }}:[{{ agentip }}]{% if port %}:{{ port }}{% endif %}{% if vrf %}%{{ vrf }}{% endif %}{{ "" }}
30+
{% endfor %}
31+
{% elif NAMESPACE_COUNT is not defined or NAMESPACE_COUNT|int <= 1 %}
32+
{% if MGMT_INTERFACE is defined %}
33+
{% for if, ip in MGMT_INTERFACE %}
34+
{% set agentip = ip.split('/')[0] %}
35+
agentAddress {{ protocol(agentip) }}:[{{ agentip }}]:161
36+
{% endfor %}
37+
{% endif %}
38+
{% if LOOPBACK_INTERFACE is defined %}
39+
{% for lo in LOOPBACK_INTERFACE %}
40+
{% if lo | length == 2 %}
41+
{% set agentip = lo[1].split('/')[0] %}
42+
agentAddress {{ protocol(agentip) }}:[{{ agentip }}]:161
43+
{% endif %}
2144
{% endfor %}
45+
{% endif %}
2246
{% else %}
2347
agentAddress udp:161
2448
agentAddress udp6:161

dockers/docker-snmp/start.sh

+3
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@ mkdir -p /etc/ssw /etc/snmp
1616
# Parse snmp.yml and insert the data in Config DB
1717
/usr/bin/snmp_yml_to_configdb.py
1818

19+
ADD_PARAM=$(printf '%s {"NAMESPACE_COUNT":"%s"}' "-a" "$NAMESPACE_COUNT")
20+
1921
SONIC_CFGGEN_ARGS=" \
2022
-d \
2123
-y /etc/sonic/sonic_version.yml \
2224
-t /usr/share/sonic/templates/sysDescription.j2,/etc/ssw/sysDescription \
2325
-t /usr/share/sonic/templates/snmpd.conf.j2,/etc/snmp/snmpd.conf \
26+
$ADD_PARAM \
2427
"
2528

2629
sonic-cfggen $SONIC_CFGGEN_ARGS

files/image_config/logrotate/rsyslog.j2

+4
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
{
3737
{% if var_log_kb <= 204800 %}
3838
size 1M
39+
{% elif var_log_kb <= 409600 %}
40+
size 2M
3941
{% else %}
4042
size 16M
4143
{% endif %}
@@ -52,6 +54,8 @@
5254
# Adjust LOG_FILE_ROTATE_SIZE_KB to reflect the "size" parameter specified above, in kB
5355
{% if var_log_kb <= 204800 %}
5456
LOG_FILE_ROTATE_SIZE_KB=1024
57+
{% elif var_log_kb <= 409600 %}
58+
LOG_FILE_ROTATE_SIZE_KB=2048
5559
{% else %}
5660
LOG_FILE_ROTATE_SIZE_KB=16384
5761
{% endif %}

platform/broadcom/sai.mk

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
LIBSAIBCM_XGS_VERSION = 7.1.54.4
2-
LIBSAIBCM_DNX_VERSION = 7.1.42.4
2+
LIBSAIBCM_DNX_VERSION = 7.1.54.4
33
LIBSAIBCM_BRANCH_NAME = REL_7.0_202205
44
LIBSAIBCM_XGS_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/$(LIBSAIBCM_BRANCH_NAME)/$(LIBSAIBCM_XGS_VERSION)"
55
LIBSAIBCM_DNX_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/$(LIBSAIBCM_BRANCH_NAME)/$(LIBSAIBCM_DNX_VERSION)"

src/sonic-ctrmgrd/ctrmgr/container

+1-1
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ def container_stop(feature, **kwargs):
288288
set_owner, _ , _ = read_config(feature)
289289
current_owner, remote_state, _ = read_state(feature)
290290
docker_id = container_id(feature)
291-
remove_label = (remote_state != "pending") or (set_owner == "local")
291+
remove_label = (set_owner == "local")
292292

293293
debug_msg("{}: set_owner:{} current_owner:{} remote_state:{} docker_id:{}".format(
294294
feature, set_owner, current_owner, remote_state, docker_id))

src/sonic-ctrmgrd/ctrmgr/ctrmgrd.py

+18-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import os
77
import sys
88
import syslog
9-
9+
import subprocess
1010
from collections import defaultdict
1111
from ctrmgr.ctrmgr_iptables import iptable_proxy_rule_upd
1212

@@ -141,7 +141,7 @@ def ts_now():
141141

142142
def is_systemd_active(feat):
143143
if not UNIT_TESTING:
144-
status = os.system('systemctl is-active --quiet {}'.format(feat))
144+
status = subprocess.call(['systemctl', 'is-active', '--quiet', str(feat)])
145145
else:
146146
status = UNIT_TESTING_ACTIVE
147147
log_debug("system status for {}: {}".format(feat, str(status)))
@@ -151,7 +151,8 @@ def is_systemd_active(feat):
151151
def restart_systemd_service(server, feat, owner):
152152
log_debug("Restart service {} to owner:{}".format(feat, owner))
153153
if not UNIT_TESTING:
154-
status = os.system("systemctl restart {}".format(feat))
154+
subprocess.call(["systemctl", "reset-failed", str(feat)])
155+
status = subprocess.call(["systemctl", "restart", str(feat)])
155156
else:
156157
server.mod_db_entry(STATE_DB_NAME,
157158
FEATURE_TABLE, feat, {"restart": "true"})
@@ -551,6 +552,7 @@ def on_state_update(self, key, op, data):
551552

552553
self.st_data[key] = _update_entry(dflt_st_feat, data)
553554
remote_state = self.st_data[key][ST_FEAT_REMOTE_STATE]
555+
current_owner = self.st_data[key][ST_FEAT_OWNER]
554556

555557
if (remote_state == REMOTE_RUNNING) and (old_remote_state != remote_state):
556558
# Tag latest
@@ -563,6 +565,13 @@ def on_state_update(self, key, op, data):
563565

564566
log_debug("try to tag latest label after {} seconds @{}".format(
565567
remote_ctr_config[TAG_IMAGE_LATEST], start_time))
568+
569+
# This is for going back to local without waiting the systemd restart time
570+
# when k8s is down, can't deploy containers to worker and need to go back to local
571+
# if current owner is already local, we don't do restart
572+
if (current_owner != OWNER_LOCAL) and (remote_state == REMOTE_NONE) and (old_remote_state == REMOTE_STOPPED):
573+
restart_systemd_service(self.server, key, OWNER_LOCAL)
574+
return
566575

567576
if (not init):
568577
if (old_remote_state == remote_state):
@@ -581,7 +590,7 @@ def on_state_update(self, key, op, data):
581590

582591
def do_tag_latest(self, feat, docker_id, image_ver):
583592
ret = kube_commands.tag_latest(feat, docker_id, image_ver)
584-
if ret != 0:
593+
if ret == 1:
585594
# Tag latest failed. Retry after an interval
586595
self.start_time = datetime.datetime.now()
587596
self.start_time += datetime.timedelta(
@@ -590,7 +599,7 @@ def do_tag_latest(self, feat, docker_id, image_ver):
590599

591600
log_debug("Tag latest as local failed retry after {} seconds @{}".
592601
format(remote_ctr_config[TAG_RETRY], self.start_time))
593-
else:
602+
elif ret == 0:
594603
last_version = self.st_data[feat][ST_FEAT_CTR_STABLE_VER]
595604
if last_version == image_ver:
596605
last_version = self.st_data[feat][ST_FEAT_CTR_LAST_VER]
@@ -600,6 +609,10 @@ def do_tag_latest(self, feat, docker_id, image_ver):
600609
self.st_data[ST_FEAT_CTR_LAST_VER] = last_version
601610
self.st_data[ST_FEAT_CTR_STABLE_VER] = image_ver
602611
self.do_clean_image(feat, image_ver, last_version)
612+
elif ret == -1:
613+
# This means the container we want to tag latest is not running
614+
# so we don't need to do clean up
615+
pass
603616

604617
def do_clean_image(self, feat, current_version, last_version):
605618
ret = kube_commands.clean_image(feat, current_version, last_version)

src/sonic-ctrmgrd/ctrmgr/kube_commands.py

+30-23
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ def tag_latest(feat, docker_id, image_ver):
478478
else:
479479
log_error(err)
480480
elif ret == -1:
481-
ret = 0
481+
log_debug(out)
482482
else:
483483
log_error(err)
484484
return ret
@@ -487,45 +487,52 @@ def _do_clean(feat, current_version, last_version):
487487
err = ""
488488
out = ""
489489
ret = 0
490-
DOCKER_ID = "docker_id"
490+
IMAGE_ID = "image_id"
491491
REPO = "repo"
492492
_, image_info, err = _run_command("docker images |grep {} |grep -v latest |awk '{{print $1,$2,$3}}'".format(feat))
493493
if image_info:
494-
version_dict = {}
495-
version_dict_default = {}
494+
remote_image_version_dict = {}
495+
local_image_version_dict = {}
496496
for info in image_info.split("\n"):
497-
rep, version, docker_id = info.split()
497+
rep, version, image_id = info.split()
498498
if len(rep.split("/")) == 1:
499-
version_dict_default[version] = {DOCKER_ID: docker_id, REPO: rep}
499+
local_image_version_dict[version] = {IMAGE_ID: image_id, REPO: rep}
500500
else:
501-
version_dict[version] = {DOCKER_ID: docker_id, REPO: rep}
501+
remote_image_version_dict[version] = {IMAGE_ID: image_id, REPO: rep}
502502

503-
if current_version in version_dict:
504-
image_prefix = version_dict[current_version][REPO]
505-
del version_dict[current_version]
503+
if current_version in remote_image_version_dict:
504+
image_prefix = remote_image_version_dict[current_version][REPO]
505+
del remote_image_version_dict[current_version]
506506
else:
507507
out = "Current version {} doesn't exist.".format(current_version)
508508
ret = 0
509509
return ret, out, err
510-
# should be only one item in version_dict_default
511-
for k, v in version_dict_default.items():
512-
local_version, local_repo, local_docker_id = k, v[REPO], v[DOCKER_ID]
513-
tag_res, _, err = _run_command("docker tag {} {}:{} && docker rmi {}:{}".format(
514-
local_docker_id, image_prefix, local_version, local_repo, local_version))
510+
# should be only one item in local_image_version_dict
511+
for k, v in local_image_version_dict.items():
512+
local_version, local_repo, local_image_id = k, v[REPO], v[IMAGE_ID]
513+
# if there is a kube image with same version, need to remove the kube version
514+
# and tag the local version to kube version for fallback preparation
515+
# and remove the local version
516+
if local_version in remote_image_version_dict:
517+
tag_res, _, err = _run_command("docker rmi {}:{} && docker tag {} {}:{} && docker rmi {}:{}".format(
518+
image_prefix, local_version, local_image_id, image_prefix, local_version, local_repo, local_version))
519+
# if there is no kube image with same version, just remove the local version
520+
else:
521+
tag_res, _, err = _run_command("docker rmi {}:{}".format(local_repo, local_version))
515522
if tag_res == 0:
516523
msg = "Tag {} local version images successfully".format(feat)
517524
log_debug(msg)
518525
else:
519526
ret = 1
520527
err = "Failed to tag {} local version images. Err: {}".format(feat, err)
521528
return ret, out, err
522-
523-
if last_version in version_dict:
524-
del version_dict[last_version]
525-
526-
versions = [item[DOCKER_ID] for item in version_dict.values()]
527-
if versions:
528-
clean_res, _, err = _run_command("docker rmi {} --force".format(" ".join(versions)))
529+
530+
if last_version in remote_image_version_dict:
531+
del remote_image_version_dict[last_version]
532+
533+
image_id_remove_list = [item[IMAGE_ID] for item in remote_image_version_dict.values()]
534+
if image_id_remove_list:
535+
clean_res, _, err = _run_command("docker rmi {} --force".format(" ".join(image_id_remove_list)))
529536
else:
530537
clean_res = 0
531538
if clean_res == 0:
@@ -534,7 +541,7 @@ def _do_clean(feat, current_version, last_version):
534541
err = "Failed to clean {} old version images. Err: {}".format(feat, err)
535542
ret = 1
536543
else:
537-
err = "Failed to docker images |grep {} |awk '{{print $3}}'".format(feat)
544+
err = "Failed to docker images |grep {} |awk '{{print $3}}'. Error: {}".format(feat, err)
538545
ret = 1
539546

540547
return ret, out, err

src/sonic-ctrmgrd/tests/container_test.py

-5
Original file line numberDiff line numberDiff line change
@@ -244,11 +244,6 @@
244244
"container_id": "",
245245
"container_version": "20201230.1.15"
246246
}
247-
},
248-
common_test.KUBE_LABEL_TABLE: {
249-
"SET": {
250-
"snmp_enabled": "false"
251-
}
252247
}
253248
}
254249
},

src/sonic-ctrmgrd/tests/ctrmgrd_test.py

+31
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,37 @@
324324
}
325325
}
326326
}
327+
},
328+
4: {
329+
common_test.DESCR: "Restart immediately to go back to local when remote_state changes to none from stopped",
330+
common_test.ARGS: "ctrmgrd",
331+
common_test.PRE: {
332+
common_test.STATE_DB_NO: {
333+
common_test.FEATURE_TABLE: {
334+
"snmp": {
335+
"remote_state": "stopped",
336+
}
337+
}
338+
}
339+
},
340+
common_test.UPD: {
341+
common_test.STATE_DB_NO: {
342+
common_test.FEATURE_TABLE: {
343+
"snmp": {
344+
"remote_state": "none",
345+
}
346+
}
347+
}
348+
},
349+
common_test.POST: {
350+
common_test.STATE_DB_NO: {
351+
common_test.FEATURE_TABLE: {
352+
"snmp": {
353+
"restart": "true"
354+
}
355+
}
356+
}
357+
}
327358
}
328359
}
329360

src/sonic-ctrmgrd/tests/kube_commands_test.py

+21-2
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@
266266
},
267267
2: {
268268
common_test.DESCR: "Tag a unstable container",
269-
common_test.RETVAL: 0,
269+
common_test.RETVAL: -1,
270270
common_test.ARGS: ["snmp", "123456", "v1"],
271271
common_test.PROC_CMD: [
272272
"docker ps |grep 123456"
@@ -382,7 +382,7 @@
382382
common_test.ARGS: ["snmp", "20201231.84", ""],
383383
common_test.PROC_CMD: [
384384
"docker images |grep snmp |grep -v latest |awk '{print $1,$2,$3}'",
385-
"docker tag 507f8d28bf6e sonick8scue.azurecr.io/docker-sonic-telemetry:20201231.74 && docker rmi docker-sonic-telemetry:20201231.74"
385+
"docker rmi docker-sonic-telemetry:20201231.74"
386386
],
387387
common_test.PROC_OUT: [
388388
"docker-sonic-telemetry 20201231.74 507f8d28bf6e\n\
@@ -394,6 +394,25 @@
394394
0
395395
]
396396
},
397+
5: {
398+
common_test.DESCR: "Clean image successfuly(local to dry-kube to kube)",
399+
common_test.RETVAL: 0,
400+
common_test.ARGS: ["snmp", "20201231.84", "20201231.74"],
401+
common_test.PROC_CMD: [
402+
"docker images |grep snmp |grep -v latest |awk '{print $1,$2,$3}'",
403+
"docker rmi sonick8scue.azurecr.io/docker-sonic-telemetry:20201231.74 && docker tag 507f8d28bf6e sonick8scue.azurecr.io/docker-sonic-telemetry:20201231.74 && docker rmi docker-sonic-telemetry:20201231.74"
404+
],
405+
common_test.PROC_OUT: [
406+
"docker-sonic-telemetry 20201231.74 507f8d28bf6e\n\
407+
sonick8scue.azurecr.io/docker-sonic-telemetry 20201231.74 507f8d28bf6f\n\
408+
sonick8scue.azurecr.io/docker-sonic-telemetry 20201231.84 507f8d28bf6g",
409+
""
410+
],
411+
common_test.PROC_CODE: [
412+
0,
413+
0
414+
]
415+
},
397416
}
398417

399418
class TestKubeCommands(object):

src/sonic-sairedis

Submodule sonic-sairedis updated 1 file

src/sonic-swss

0 commit comments

Comments
 (0)