[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
|
# Copy systemd timer configuration
|
||||||
# It implements delayed start of services
|
# It implements delayed start of services
|
||||||
sudo cp $BUILD_TEMPLATES/snmp.timer $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_SYSTEM
|
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' %}
|
{% if enable_system_telemetry == 'y' %}
|
||||||
sudo cp $BUILD_TEMPLATES/telemetry.timer $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_SYSTEM
|
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 %}
|
{% endif %}
|
||||||
|
|
||||||
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get purge -y python-dev
|
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 *line_copy;
|
||||||
char *service_name;
|
char *service_name;
|
||||||
char *type;
|
char *type;
|
||||||
|
char *save_ptr1 = NULL;
|
||||||
|
char *save_ptr2 = NULL;
|
||||||
ssize_t nread;
|
ssize_t nread;
|
||||||
bool section_done = false;
|
bool section_done = false;
|
||||||
char tmp_file_path[PATH_MAX];
|
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.
|
* 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
|
* Read service dependency from Unit and Install
|
||||||
* sections, replace if dependent on multi instance
|
* sections, replace if dependent on multi instance
|
||||||
* service.
|
* service.
|
||||||
@ -162,30 +166,31 @@ static void replace_multi_inst_dep(char *src) {
|
|||||||
fp_tmp = fopen(tmp_file_path, "w");
|
fp_tmp = fopen(tmp_file_path, "w");
|
||||||
|
|
||||||
while ((nread = getline(&line, &len, fp_src)) != -1 ) {
|
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;
|
section_done = true;
|
||||||
fputs(line,fp_tmp);
|
fputs(line,fp_tmp);
|
||||||
} else if (strstr(line, "[Install]") != NULL) {
|
} else if (strstr(line, "[Install]") != NULL) {
|
||||||
section_done = false;
|
section_done = false;
|
||||||
fputs(line,fp_tmp);
|
fputs(line,fp_tmp);
|
||||||
} else if ((strstr(line, "[Unit]") != NULL) ||
|
} else if ((strstr(line, "[Unit]") != NULL) ||
|
||||||
(strstr(line, "Description") != NULL) ||
|
(strstr(line, "Description") != NULL) ||
|
||||||
(section_done == true)){
|
(section_done == true)) {
|
||||||
fputs(line,fp_tmp);
|
fputs(line,fp_tmp);
|
||||||
} else {
|
} else {
|
||||||
line_copy = strdup(line);
|
line_copy = strdup(line);
|
||||||
token = strtok(line_copy, "=");
|
token = strtok_r(line_copy, "=", &save_ptr1);
|
||||||
while ((word = strtok(NULL, " "))){
|
while ((word = strtok_r(NULL, " ", &save_ptr1))) {
|
||||||
if((strchr(word, '.') == NULL) ||
|
if((strchr(word, '.') == NULL) ||
|
||||||
(strchr(word, '@') != NULL)) {
|
(strchr(word, '@') != NULL)) {
|
||||||
snprintf(buf, MAX_BUF_SIZE,"%s=%s\n",token, word);
|
snprintf(buf, MAX_BUF_SIZE,"%s=%s\n",token, word);
|
||||||
fputs(buf,fp_tmp);
|
fputs(buf,fp_tmp);
|
||||||
} else {
|
} else {
|
||||||
service_name = strdup(word);
|
service_name = strdup(word);
|
||||||
service_name = strtok(service_name, ".");
|
service_name = strtok_r(service_name, ".", &save_ptr2);
|
||||||
type = strtok(NULL, " ");
|
type = strtok_r(NULL, " ", &save_ptr2);
|
||||||
if (is_multi_instance_service(word)) {
|
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",
|
snprintf(buf, MAX_BUF_SIZE, "%s=%s@%d.%s\n",
|
||||||
token, service_name, i, type);
|
token, service_name, i, type);
|
||||||
fputs(buf,fp_tmp);
|
fputs(buf,fp_tmp);
|
||||||
@ -513,7 +518,7 @@ static int get_num_of_asic() {
|
|||||||
|
|
||||||
while ((nread = getline(&line, &len, fp)) != -1) {
|
while ((nread = getline(&line, &len, fp)) != -1) {
|
||||||
if ((strstr(line, "onie_platform") != NULL) ||
|
if ((strstr(line, "onie_platform") != NULL) ||
|
||||||
(strstr(line, "aboot_platform") != NULL)) {
|
(strstr(line, "aboot_platform") != NULL)) {
|
||||||
token = strtok(line, "=");
|
token = strtok(line, "=");
|
||||||
platform = strtok(NULL, "=");
|
platform = strtok(NULL, "=");
|
||||||
strip_trailing_newline(platform);
|
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 each unit file, get the installation targets and install the unit
|
||||||
for (int i = 0; i < num_unit_files; i++) {
|
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) {
|
if ((num_asics == 1) && strstr(unit_instance, "@") != NULL) {
|
||||||
prefix = strtok(unit_instance, "@");
|
prefix = strtok(unit_instance, "@");
|
||||||
suffix = strtok(NULL, "@");
|
suffix = strtok(NULL, "@");
|
||||||
|
Loading…
Reference in New Issue
Block a user