func setupUdsForEnvoyAdmin()

in agent/agent.go [420:451]


func setupUdsForEnvoyAdmin(agentConfig config.AgentConfig, messageSources *messagesources.MessageSources) {
	if agentConfig.EnvoyAdminMode == config.UDS {
		// create the envoy admin uds file to avoid failure of starting health check
		// in uds mode, health check http client is connecting to envoy admin uds
		if fileInfo, err := os.Stat(agentConfig.EnvoyServerAdminUdsPath); !os.IsNotExist(err) {
			log.Debugf("Envoy Admin UDS [%s] already created", agentConfig.EnvoyServerAdminUdsPath)
			if fileInfo.Mode().Perm() != os.FileMode(config.ENVOY_ADMIN_UDS_FILE_MODE_DEFAULT) {
				if err := os.Chmod(agentConfig.EnvoyServerAdminUdsPath, config.ENVOY_ADMIN_UDS_FILE_MODE_DEFAULT); err != nil {
					log.Errorf("Failed to change Envoy Admin UDS [%s] file permission to [%d]: %v. Exiting Agent",
						agentConfig.EnvoyServerAdminUdsPath, config.ENVOY_ADMIN_UDS_FILE_MODE_DEFAULT, err)
					messageSources.SetAgentExit()
				}
			}
			return
		}
		unixAddr := net.UnixAddr{Name: agentConfig.EnvoyServerAdminUdsPath}
		listener, err := net.ListenUnix(config.NETWORK_SOCKET_UNIX, &unixAddr)
		if err != nil {
			log.Errorf("Failed to create Envoy Admin UDS [%s]: %v. Exiting Agent",
				agentConfig.EnvoyServerAdminUdsPath, err)
			messageSources.SetAgentExit()
		}
		// keep uds file, when envoy starts it will re-link/re-use this uds
		listener.SetUnlinkOnClose(false)
		listener.Close()
		if err := os.Chmod(agentConfig.EnvoyServerAdminUdsPath, config.ENVOY_ADMIN_UDS_FILE_MODE_DEFAULT); err != nil {
			log.Errorf("Failed to change Envoy Admin UDS [%s] file permission to [%d]: %v. Exiting Agent",
				agentConfig.EnvoyServerAdminUdsPath, config.ENVOY_ADMIN_UDS_FILE_MODE_DEFAULT, err)
			messageSources.SetAgentExit()
		}
	}
}