代码拉取完成,页面将自动刷新
// Copyright 2018 The Kubeflow Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package testutil
import (
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
kubeflowv1 "gitee.com/vak80/training-operator/pkg/apis/kubeflow.org/v1"
)
const TestTFJobName = "test-tfjob"
func NewTFJobWithCleanPolicy(chief, worker, ps int, policy kubeflowv1.CleanPodPolicy) *kubeflowv1.TFJob {
if chief == 1 {
tfJob := NewTFJobWithChief(worker, ps)
tfJob.Spec.RunPolicy.CleanPodPolicy = &policy
return tfJob
}
tfJob := NewTFJob(worker, ps)
tfJob.Spec.RunPolicy.CleanPodPolicy = &policy
return tfJob
}
func NewTFJobWithCleanupJobDelay(chief, worker, ps int, ttl *int32) *kubeflowv1.TFJob {
if chief == 1 {
tfJob := NewTFJobWithChief(worker, ps)
tfJob.Spec.RunPolicy.TTLSecondsAfterFinished = ttl
tfJob.Spec.RunPolicy.CleanPodPolicy = kubeflowv1.CleanPodPolicyPointer(kubeflowv1.CleanPodPolicyNone)
return tfJob
}
tfJob := NewTFJob(worker, ps)
tfJob.Spec.RunPolicy.TTLSecondsAfterFinished = ttl
tfJob.Spec.RunPolicy.CleanPodPolicy = kubeflowv1.CleanPodPolicyPointer(kubeflowv1.CleanPodPolicyNone)
return tfJob
}
func NewTFJobWithActiveDeadlineSeconds(chief, worker, ps int, ads *int64) *kubeflowv1.TFJob {
if chief == 1 {
tfJob := NewTFJobWithChief(worker, ps)
tfJob.Spec.RunPolicy.ActiveDeadlineSeconds = ads
tfJob.Spec.RunPolicy.CleanPodPolicy = kubeflowv1.CleanPodPolicyPointer(kubeflowv1.CleanPodPolicyAll)
return tfJob
}
tfJob := NewTFJob(worker, ps)
tfJob.Spec.RunPolicy.ActiveDeadlineSeconds = ads
tfJob.Spec.RunPolicy.CleanPodPolicy = kubeflowv1.CleanPodPolicyPointer(kubeflowv1.CleanPodPolicyAll)
return tfJob
}
func NewTFJobWithBackoffLimit(chief, worker, ps int, backoffLimit *int32) *kubeflowv1.TFJob {
if chief == 1 {
tfJob := NewTFJobWithChief(worker, ps)
tfJob.Spec.RunPolicy.BackoffLimit = backoffLimit
tfJob.Spec.TFReplicaSpecs["Worker"].RestartPolicy = "OnFailure"
tfJob.Spec.RunPolicy.CleanPodPolicy = kubeflowv1.CleanPodPolicyPointer(kubeflowv1.CleanPodPolicyAll)
return tfJob
}
tfJob := NewTFJob(worker, ps)
tfJob.Spec.RunPolicy.BackoffLimit = backoffLimit
tfJob.Spec.TFReplicaSpecs["Worker"].RestartPolicy = "OnFailure"
tfJob.Spec.RunPolicy.CleanPodPolicy = kubeflowv1.CleanPodPolicyPointer(kubeflowv1.CleanPodPolicyAll)
return tfJob
}
func NewTFJobWithChief(worker, ps int) *kubeflowv1.TFJob {
tfJob := NewTFJob(worker, ps)
chief := int32(1)
tfJob.Spec.TFReplicaSpecs[kubeflowv1.TFJobReplicaTypeChief] = &kubeflowv1.ReplicaSpec{
Replicas: &chief,
Template: NewTFReplicaSpecTemplate(),
}
return tfJob
}
func NewTFJobWithEvaluator(worker, ps, evaluator int) *kubeflowv1.TFJob {
tfJob := NewTFJob(worker, ps)
if evaluator > 0 {
evaluator := int32(evaluator)
tfJob.Spec.TFReplicaSpecs[kubeflowv1.TFJobReplicaTypeEval] = &kubeflowv1.ReplicaSpec{
Replicas: &evaluator,
Template: NewTFReplicaSpecTemplate(),
}
}
return tfJob
}
func NewTFJobWithSuccessPolicy(worker, ps int, successPolicy kubeflowv1.SuccessPolicy) *kubeflowv1.TFJob {
tfJob := NewTFJob(worker, ps)
tfJob.Spec.SuccessPolicy = &successPolicy
return tfJob
}
func NewTFJob(worker, ps int) *kubeflowv1.TFJob {
tfJob := &kubeflowv1.TFJob{
TypeMeta: metav1.TypeMeta{
Kind: kubeflowv1.TFJobKind,
},
ObjectMeta: metav1.ObjectMeta{
Name: TestTFJobName,
Namespace: metav1.NamespaceDefault,
},
Spec: kubeflowv1.TFJobSpec{
TFReplicaSpecs: make(map[kubeflowv1.ReplicaType]*kubeflowv1.ReplicaSpec),
},
}
kubeflowv1.SetObjectDefaults_TFJob(tfJob)
if worker > 0 {
worker := int32(worker)
workerReplicaSpec := &kubeflowv1.ReplicaSpec{
Replicas: &worker,
Template: NewTFReplicaSpecTemplate(),
}
tfJob.Spec.TFReplicaSpecs[kubeflowv1.TFJobReplicaTypeWorker] = workerReplicaSpec
}
if ps > 0 {
ps := int32(ps)
psReplicaSpec := &kubeflowv1.ReplicaSpec{
Replicas: &ps,
Template: NewTFReplicaSpecTemplate(),
}
tfJob.Spec.TFReplicaSpecs[kubeflowv1.TFJobReplicaTypePS] = psReplicaSpec
}
return tfJob
}
func NewTFJobV2(worker, ps, master, chief, evaluator int) *kubeflowv1.TFJob {
tfJob := &kubeflowv1.TFJob{
TypeMeta: metav1.TypeMeta{
Kind: kubeflowv1.TFJobKind,
},
ObjectMeta: metav1.ObjectMeta{
Name: TestTFJobName,
Namespace: metav1.NamespaceDefault,
},
Spec: kubeflowv1.TFJobSpec{
TFReplicaSpecs: make(map[kubeflowv1.ReplicaType]*kubeflowv1.ReplicaSpec),
},
}
kubeflowv1.SetObjectDefaults_TFJob(tfJob)
if worker > 0 {
worker := int32(worker)
workerReplicaSpec := &kubeflowv1.ReplicaSpec{
Replicas: &worker,
Template: NewTFReplicaSpecTemplate(),
}
tfJob.Spec.TFReplicaSpecs[kubeflowv1.TFJobReplicaTypeWorker] = workerReplicaSpec
}
if ps > 0 {
ps := int32(ps)
psReplicaSpec := &kubeflowv1.ReplicaSpec{
Replicas: &ps,
Template: NewTFReplicaSpecTemplate(),
}
tfJob.Spec.TFReplicaSpecs[kubeflowv1.TFJobReplicaTypePS] = psReplicaSpec
}
if master > 0 {
master := int32(master)
masterReplicaSpec := &kubeflowv1.ReplicaSpec{
Replicas: &master,
Template: NewTFReplicaSpecTemplate(),
}
tfJob.Spec.TFReplicaSpecs[kubeflowv1.TFJobReplicaTypeMaster] = masterReplicaSpec
}
if chief > 0 {
chief := int32(chief)
chiefReplicaSpec := &kubeflowv1.ReplicaSpec{
Replicas: &chief,
Template: NewTFReplicaSpecTemplate(),
}
tfJob.Spec.TFReplicaSpecs[kubeflowv1.TFJobReplicaTypeChief] = chiefReplicaSpec
}
if evaluator > 0 {
evaluator := int32(evaluator)
evaluatorReplicaSpec := &kubeflowv1.ReplicaSpec{
Replicas: &evaluator,
Template: NewTFReplicaSpecTemplate(),
}
tfJob.Spec.TFReplicaSpecs[kubeflowv1.TFJobReplicaTypeChief] = evaluatorReplicaSpec
}
return tfJob
}
func NewTFJobWithNamespace(worker, ps int, ns string) *kubeflowv1.TFJob {
tfJob := NewTFJob(worker, ps)
tfJob.Namespace = ns
return tfJob
}
func NewTFJobWithEvaluatorAndNamespace(worker, ps, evaluator int, ns string) *kubeflowv1.TFJob {
tfJob := NewTFJobWithEvaluator(worker, ps, evaluator)
tfJob.Namespace = ns
return tfJob
}
func NewTFReplicaSpecTemplate() v1.PodTemplateSpec {
return v1.PodTemplateSpec{
Spec: v1.PodSpec{
Containers: []v1.Container{
v1.Container{
Name: kubeflowv1.TFJobDefaultContainerName,
Image: "test-image-for-kubeflow-training-operator:latest",
Args: []string{"Fake", "Fake"},
Ports: []v1.ContainerPort{
v1.ContainerPort{
Name: kubeflowv1.TFJobDefaultPortName,
ContainerPort: kubeflowv1.TFJobDefaultPort,
},
},
},
},
},
}
}
func CheckCondition(tfJob *kubeflowv1.TFJob, condition kubeflowv1.JobConditionType, reason string) bool {
for _, v := range tfJob.Status.Conditions {
if v.Type == condition && v.Status == v1.ConditionTrue && v.Reason == reason {
return true
}
}
return false
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。