in ecs-init/engine/engine.go [108:160]
func (e *Engine) PreStart() error {
// setup gpu if necessary
err := e.PreStartGPU()
if err != nil {
return err
}
// Enable use of loopback addresses for local routing purposes
err = e.loopbackRouting.Enable()
if err != nil {
return engineError("could not enable loopback routing", err)
}
// Disable ipv6 router advertisements
err = e.ipv6RouterAdvertisements.Disable()
if err != nil {
return engineError("could not disable ipv6 router advertisements", err)
}
// Add the rerouting netfilter rule for credentials endpoint
err = e.credentialsProxyRoute.Create()
if err != nil {
return engineError("could not create route to the credentials proxy", err)
}
docker, err := getDockerClient()
if err != nil {
return dockerError(err)
}
imageLoaded, err := docker.IsAgentImageLoaded()
if err != nil {
return engineError("could not check Docker for Agent image presence", err)
}
switch e.downloader.AgentCacheStatus() {
// Uncached, go get the Agent.
case cache.StatusUncached:
return e.downloadAndLoadCache(docker)
// The Agent is cached, and mandates a reload regardless of the
// already loaded image.
case cache.StatusReloadNeeded:
return e.load(docker, e.downloader.LoadCachedAgent)
// Agent is cached, respect the already loaded Agent.
case cache.StatusCached:
if imageLoaded {
return nil
}
return e.load(docker, e.downloader.LoadCachedAgent)
// There shouldn't be unhandled cache states.
default:
return errors.New("could not handle cache state")
}
}