Skip to content

Commit 56b8dab

Browse files
committed
Require all tracejobs to have a deadline, allow overriding this
1 parent a38c074 commit 56b8dab

File tree

2 files changed

+17
-10
lines changed

2 files changed

+17
-10
lines changed

pkg/cmd/run.go

+15-10
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ var (
2525
ImageNameTag = "quay.io/iovisor/kubectl-trace-bpftrace:latest"
2626
// InitImageNameTag represents the default init container image
2727
InitImageNameTag = "quay.io/iovisor/kubectl-trace-init:latest"
28+
// By default do not allow traces to run for longer than one hour
29+
DefaultDeadline = 3600
2830
)
2931

3032
var (
@@ -73,6 +75,7 @@ type RunOptions struct {
7375
imageName string
7476
initImageName string
7577
fetchHeaders bool
78+
deadline int64
7679

7780
resourceArg string
7881
attach bool
@@ -91,6 +94,7 @@ func NewRunOptions(streams genericclioptions.IOStreams) *RunOptions {
9194
serviceAccount: "default",
9295
imageName: ImageNameTag,
9396
initImageName: InitImageNameTag,
97+
deadline: int64(DefaultDeadline),
9498
}
9599
}
96100

@@ -127,6 +131,7 @@ func NewRunCommand(factory factory.Factory, streams genericclioptions.IOStreams)
127131
cmd.Flags().StringVar(&o.imageName, "imagename", o.imageName, "Custom image for the tracerunner")
128132
cmd.Flags().StringVar(&o.initImageName, "init-imagename", o.initImageName, "Custom image for the init container responsible to fetch and prepare linux headers")
129133
cmd.Flags().BoolVar(&o.fetchHeaders, "fetch-headers", o.fetchHeaders, "Whether to fetch linux headers or not")
134+
cmd.Flags().Int64Var(&o.deadline, "deadline", o.deadline, "Maximum time to allow trace to run in seconds")
130135

131136
return cmd
132137
}
@@ -289,19 +294,19 @@ func (o *RunOptions) Run() error {
289294
}
290295

291296
tj := tracejob.TraceJob{
292-
Name: fmt.Sprintf("%s%s", meta.ObjectNamePrefix, string(juid)),
293-
Namespace: o.namespace,
294-
ServiceAccount: o.serviceAccount,
295-
ID: juid,
296-
Hostname: o.nodeName,
297-
Program: o.program,
298-
PodUID: o.podUID,
299-
ContainerName: o.container,
300-
IsPod: o.isPod,
301-
// todo(dalehamel) > following fields to be used for #48
297+
Name: fmt.Sprintf("%s%s", meta.ObjectNamePrefix, string(juid)),
298+
Namespace: o.namespace,
299+
ServiceAccount: o.serviceAccount,
300+
ID: juid,
301+
Hostname: o.nodeName,
302+
Program: o.program,
303+
PodUID: o.podUID,
304+
ContainerName: o.container,
305+
IsPod: o.isPod,
302306
ImageNameTag: o.imageName,
303307
InitImageNameTag: o.initImageName,
304308
FetchHeaders: o.fetchHeaders,
309+
Deadline: o.deadline,
305310
}
306311

307312
job, err := tc.CreateJob(tj)

pkg/tracejob/job.go

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ type TraceJob struct {
3535
ImageNameTag string
3636
InitImageNameTag string
3737
FetchHeaders bool
38+
Deadline int64
3839
StartTime metav1.Time
3940
Status TraceJobStatus
4041
}
@@ -217,6 +218,7 @@ func (t *TraceJobClient) CreateJob(nj TraceJob) (*batchv1.Job, error) {
217218
job := &batchv1.Job{
218219
ObjectMeta: commonMeta,
219220
Spec: batchv1.JobSpec{
221+
ActiveDeadlineSeconds: int64Ptr(nj.Deadline),
220222
TTLSecondsAfterFinished: int32Ptr(5),
221223
Parallelism: int32Ptr(1),
222224
Completions: int32Ptr(1),

0 commit comments

Comments
 (0)