[systemd-generator]: Fix dependency update for multi-asic platform (#4820)
* [systemd-generator]: Fix the code to make sure that dependencies of host services are generated correctly for multi-asic platforms. Add code to make sure that systemd timer files are also modified to add the correct service dependency for multi-asic platforms. Signed-off-by: SuvarnaMeenakshi <sumeenak@microsoft.com> * [systemd-generator]: Minor fix, remove debug code and remove unused variable.
This commit is contained in:
parent
ce391645f2
commit
ab2177b4a9
@ -519,10 +519,10 @@ sudo LANG=C cp $SCRIPTS_DIR/sonic-netns-exec $FILESYSTEM_ROOT/usr/bin/sonic-netn
|
||||
# Copy systemd timer configuration
|
||||
# It implements delayed start of services
|
||||
sudo cp $BUILD_TEMPLATES/snmp.timer $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_SYSTEM
|
||||
sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable snmp.timer
|
||||
echo "snmp.timer" | sudo tee -a $GENERATED_SERVICE_FILE
|
||||
{% if enable_system_telemetry == 'y' %}
|
||||
sudo cp $BUILD_TEMPLATES/telemetry.timer $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_SYSTEM
|
||||
sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable telemetry.timer
|
||||
echo "telemetry.timer" | sudo tee -a $GENERATED_SERVICE_FILE
|
||||
{% endif %}
|
||||
|
||||
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get purge -y python-dev
|
||||
|
@ -147,12 +147,16 @@ static void replace_multi_inst_dep(char *src) {
|
||||
char *line_copy;
|
||||
char *service_name;
|
||||
char *type;
|
||||
char *save_ptr1 = NULL;
|
||||
char *save_ptr2 = NULL;
|
||||
ssize_t nread;
|
||||
bool section_done = false;
|
||||
char tmp_file_path[PATH_MAX];
|
||||
|
||||
/* assumes that the service files has 3 sections,
|
||||
/* Assumes that the service files has 3 sections,
|
||||
* in the order: Unit, Service and Install.
|
||||
* Assumes that the timer file has 3 sectiosn,
|
||||
* in the order: Unit, Timer and Install.
|
||||
* Read service dependency from Unit and Install
|
||||
* sections, replace if dependent on multi instance
|
||||
* service.
|
||||
@ -162,30 +166,31 @@ static void replace_multi_inst_dep(char *src) {
|
||||
fp_tmp = fopen(tmp_file_path, "w");
|
||||
|
||||
while ((nread = getline(&line, &len, fp_src)) != -1 ) {
|
||||
if (strstr(line, "[Service]") != NULL) {
|
||||
if ((strstr(line, "[Service]") != NULL) ||
|
||||
(strstr(line, "[Timer]") != NULL)) {
|
||||
section_done = true;
|
||||
fputs(line,fp_tmp);
|
||||
} else if (strstr(line, "[Install]") != NULL) {
|
||||
} else if (strstr(line, "[Install]") != NULL) {
|
||||
section_done = false;
|
||||
fputs(line,fp_tmp);
|
||||
} else if ((strstr(line, "[Unit]") != NULL) ||
|
||||
(strstr(line, "Description") != NULL) ||
|
||||
(section_done == true)){
|
||||
(section_done == true)) {
|
||||
fputs(line,fp_tmp);
|
||||
} else {
|
||||
line_copy = strdup(line);
|
||||
token = strtok(line_copy, "=");
|
||||
while ((word = strtok(NULL, " "))){
|
||||
token = strtok_r(line_copy, "=", &save_ptr1);
|
||||
while ((word = strtok_r(NULL, " ", &save_ptr1))) {
|
||||
if((strchr(word, '.') == NULL) ||
|
||||
(strchr(word, '@') != NULL)) {
|
||||
snprintf(buf, MAX_BUF_SIZE,"%s=%s\n",token, word);
|
||||
fputs(buf,fp_tmp);
|
||||
} else {
|
||||
service_name = strdup(word);
|
||||
service_name = strtok(service_name, ".");
|
||||
type = strtok(NULL, " ");
|
||||
service_name = strtok_r(service_name, ".", &save_ptr2);
|
||||
type = strtok_r(NULL, " ", &save_ptr2);
|
||||
if (is_multi_instance_service(word)) {
|
||||
for(i = 0; i < num_asics; i++){
|
||||
for(i = 0; i < num_asics; i++) {
|
||||
snprintf(buf, MAX_BUF_SIZE, "%s=%s@%d.%s\n",
|
||||
token, service_name, i, type);
|
||||
fputs(buf,fp_tmp);
|
||||
@ -513,7 +518,7 @@ static int get_num_of_asic() {
|
||||
|
||||
while ((nread = getline(&line, &len, fp)) != -1) {
|
||||
if ((strstr(line, "onie_platform") != NULL) ||
|
||||
(strstr(line, "aboot_platform") != NULL)) {
|
||||
(strstr(line, "aboot_platform") != NULL)) {
|
||||
token = strtok(line, "=");
|
||||
platform = strtok(NULL, "=");
|
||||
strip_trailing_newline(platform);
|
||||
@ -580,7 +585,7 @@ int main(int argc, char **argv) {
|
||||
|
||||
// For each unit file, get the installation targets and install the unit
|
||||
for (int i = 0; i < num_unit_files; i++) {
|
||||
unit_instance = strdup(unit_files[i]);
|
||||
unit_instance = strdup(unit_files[i]);
|
||||
if ((num_asics == 1) && strstr(unit_instance, "@") != NULL) {
|
||||
prefix = strtok(unit_instance, "@");
|
||||
suffix = strtok(NULL, "@");
|
||||
|
Loading…
Reference in New Issue
Block a user