func()

in cache-config/t3c-apply/torequest/torequest.go [826:917]


func (r *TrafficOpsReq) ProcessConfigFiles(metaData *t3cutil.ApplyMetaData) (UpdateStatus, error) {
	var updateStatus UpdateStatus = UpdateTropsNotNeeded
	var auditErrors []string

	log.Infoln(" ======== Start processing config files ========")

	filesAdding := []string{} // list of file names being added, needed for verification.
	for fileName := range r.configFiles {
		filesAdding = append(filesAdding, fileName)
	}

	for _, cfg := range r.configFiles {
		// add service metadata
		if strings.Contains(cfg.Path, "/opt/trafficserver/") || strings.Contains(cfg.Dir, "udev") {
			cfg.Service = "trafficserver"
			if !r.Cfg.InstallPackages && !r.IsPackageInstalled("trafficserver") {
				log.Errorln("Not installing packages, but trafficserver isn't installed. Continuing.")
			}
		} else if strings.Contains(cfg.Path, "/opt/ort") && strings.Contains(cfg.Name, "12M_facts") {
			cfg.Service = "puppet"
		} else if strings.Contains(cfg.Path, "cron") || strings.Contains(cfg.Name, "sysctl.conf") || strings.Contains(cfg.Name, "50-ats.rules") || strings.Contains(cfg.Name, "cron") {
			cfg.Service = "system"
		} else if strings.Contains(cfg.Path, "ntp.conf") {
			cfg.Service = "ntpd"
		} else {
			cfg.Service = "unknown"
		}

		log.Debugf("About to process config file: %s, service: %s\n", cfg.Path, cfg.Service)

		err := r.checkConfigFile(cfg, filesAdding)
		if err != nil {
			log.Errorln(err)
			r.configFiles[cfg.Name].AuditError = err.Error()
		}
	}

	changesRequired := 0
	shouldRestartReload := ShouldReloadRestart{[]FileRestartData{}}

	for _, cfg := range r.configFiles {
		metaData.OwnedFilePaths = append(metaData.OwnedFilePaths, cfg.Path) // all config files are added to OwnedFiles, even if they aren't changed on disk.

		if cfg.ChangeNeeded &&
			!cfg.ChangeApplied &&
			cfg.AuditComplete &&
			!cfg.PreReqFailed &&
			!cfg.AuditFailed {

			changesRequired++
			if cfg.Name == "plugin.config" && r.configFiles["remap.config"].PreReqFailed {
				updateStatus = UpdateTropsFailed
				log.Errorln("plugin.config changed however, prereqs failed for remap.config so I am skipping updates for plugin.config")
				continue
			} else if cfg.Name == "remap.config" && r.configFiles["plugin.config"].PreReqFailed {
				updateStatus = UpdateTropsFailed
				log.Errorln("remap.config changed however, prereqs failed for plugin.config so I am skipping updates for remap.config")
				continue
			} else if cfg.Name == "ip_allow.config" && !r.Cfg.UpdateIPAllow {
				log.Warnln("ip_allow.config changed, not updating! Run with --mode=badass or --syncds-updates-ipallow=true to update!")
				continue
			} else {
				log.Debugf("All Prereqs passed for replacing %s on disk with that in Traffic Ops.\n", cfg.Name)
				reData, err := r.replaceCfgFile(cfg)
				if err != nil {
					log.Errorf("failed to replace the config file, '%s',  on disk with data in Traffic Ops.\n", cfg.Name)
				}
				shouldRestartReload.ReloadRestart = append(shouldRestartReload.ReloadRestart, *reData)
			}
		} else if cfg.AuditFailed {
			auditErrors = append(auditErrors, cfg.AuditError)
			log.Warnf("audit failed for config file: %v Error: %s", cfg.Name, cfg.AuditError)
			updateStatus = UpdateTropsFailed
		}
	}

	if updateStatus == UpdateTropsFailed {
		return UpdateTropsFailed, errors.New(strings.Join(auditErrors, "\n"))
	}

	r.RestartData = r.CheckReloadRestart(shouldRestartReload.ReloadRestart)

	if 0 < len(r.changedFiles) {
		log.Infof("Final state: remap.config: %t reload: %t restart: %t ntpd: %t sysctl: %t", r.RemapConfigReload, r.TrafficCtlReload, r.TrafficServerRestart, r.NtpdRestart, r.SysCtlReload)
	}

	if updateStatus != UpdateTropsFailed && changesRequired > 0 {
		return UpdateTropsNeeded, nil
	}

	return updateStatus, nil
}