in gce-containers-startup/gce-containers-startup.go [66:112]
func ExecStartup(metadataProvider metadata.Provider, authProvider utils.AuthProvider, runner *runtime.ContainerRunner, openIptables bool) error {
body, err := metadataProvider.RetrieveManifest()
if err != nil {
return fmt.Errorf("Cannot load container declaration: %v", err)
}
declaration := api.ContainerSpec{}
err = yaml.Unmarshal(body, &declaration)
if err != nil {
return fmt.Errorf("Cannot parse container declaration '%s': %v", body, err)
}
spec := declaration.Spec
if len(spec.Containers) != 1 {
return fmt.Errorf("Container declaration should include exactly 1 container, %d found", len(spec.Containers))
}
var auth = ""
if utils.UseGcpTokenForImage(spec.Containers[0].Image) {
auth, err = authProvider.RetrieveAuthToken()
if err != nil {
return fmt.Errorf("Cannot get auth token: %v", err)
}
} else {
log.Printf("Non-GCR registry used - Konlet will use empty auth")
}
if openIptables {
err = utils.InitIpTables()
if err != nil {
return fmt.Errorf("Cannot init IPtables: %v", err)
}
err = utils.OpenIptables()
if err != nil {
return fmt.Errorf("Cannot update IPtables: %v", err)
}
}
log.Printf("Launching user container '%s'", spec.Containers[0].Image)
err = runner.RunContainer(auth, spec, *runDetachedFlag)
if err != nil {
return fmt.Errorf("Failed to start container: %v", err)
}
return nil
}