本文整理汇总了Golang中github.com/concourse/atc/worker.Worker.CreateContainer方法的典型用法代码示例。如果您正苦于以下问题:Golang Worker.CreateContainer方法的具体用法?Golang Worker.CreateContainer怎么用?Golang Worker.CreateContainer使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/concourse/atc/worker.Worker
的用法示例。
在下文中一共展示了Worker.CreateContainer方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: InitWithSources
func (tracker *tracker) InitWithSources(
logger lager.Logger,
metadata Metadata,
session Session,
typ ResourceType,
tags atc.Tags,
sources map[string]ArtifactSource,
) (Resource, []string, error) {
logger = logger.Session("init-with-sources")
logger.Debug("start")
defer logger.Debug("done")
container, found, err := tracker.workerClient.FindContainerForIdentifier(logger, session.ID)
if err != nil {
logger.Error("failed-to-look-for-existing-container", err)
return nil, nil, err
}
if found {
logger.Debug("found-existing-container", lager.Data{"container": container.Handle()})
missingNames := []string{}
for name, _ := range sources {
missingNames = append(missingNames, name)
}
return NewResource(container), missingNames, nil
}
resourceSpec := worker.ResourceTypeContainerSpec{
Type: string(typ),
Ephemeral: session.Ephemeral,
Tags: tags,
Env: metadata.Env(),
}
compatibleWorkers, err := tracker.workerClient.AllSatisfying(resourceSpec.WorkerSpec())
if err != nil {
return nil, nil, err
}
// find the worker with the most volumes
mounts := []worker.VolumeMount{}
missingSources := []string{}
var chosenWorker worker.Worker
for _, w := range compatibleWorkers {
candidateMounts := []worker.VolumeMount{}
missing := []string{}
for name, source := range sources {
volume, found, err := source.VolumeOn(w)
if err != nil {
return nil, nil, err
}
if found {
candidateMounts = append(candidateMounts, worker.VolumeMount{
Volume: volume,
MountPath: ResourcesDir("put/" + name),
})
} else {
missing = append(missing, name)
}
}
if len(candidateMounts) >= len(mounts) {
for _, mount := range mounts {
mount.Volume.Release(0)
}
mounts = candidateMounts
missingSources = missing
chosenWorker = w
} else {
for _, mount := range candidateMounts {
mount.Volume.Release(0)
}
}
}
resourceSpec.Mounts = mounts
container, err = chosenWorker.CreateContainer(logger, session.ID, resourceSpec)
if err != nil {
logger.Error("failed-to-create-container", err)
return nil, nil, err
}
logger.Info("created", lager.Data{"container": container.Handle()})
for _, mount := range mounts {
mount.Volume.Release(0)
}
return NewResource(container), missingSources, nil
}