func ExecStartup()

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
}