Skip to content

Commit 48991de

Browse files
Add a way to run already existing containers which stop after launch
1 parent 262f38d commit 48991de

File tree

3 files changed

+50
-13
lines changed

3 files changed

+50
-13
lines changed

core/runjob.go

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,36 @@ func init() {
1616

1717
type RunJob struct {
1818
BareJob
19-
Client *docker.Client `json:"-"`
20-
User string `default:"root"`
21-
TTY bool `default:"false"`
22-
Delete bool `default:"true"`
23-
Image string
24-
Network string
19+
Client *docker.Client `json:"-"`
20+
User string `default:"root"`
21+
TTY bool `default:"false"`
22+
Delete bool `default:"true"`
23+
Image string
24+
Network string
25+
Container string
2526
}
2627

2728
func NewRunJob(c *docker.Client) *RunJob {
2829
return &RunJob{Client: c}
2930
}
3031

3132
func (j *RunJob) Run(ctx *Context) error {
32-
if err := j.pullImage(); err != nil {
33-
return err
34-
}
33+
var container *docker.Container
34+
var err error
35+
if j.Image != "" && j.Container == "" {
36+
if err = j.pullImage(); err != nil {
37+
return err
38+
}
3539

36-
container, err := j.buildContainer()
37-
if err != nil {
38-
return err
40+
container, err = j.buildContainer()
41+
if err != nil {
42+
return err
43+
}
44+
} else {
45+
container, err = j.getContainer(j.Container)
46+
if err != nil {
47+
return err
48+
}
3949
}
4050

4151
if err := j.startContainer(ctx.Execution, container); err != nil {
@@ -46,7 +56,10 @@ func (j *RunJob) Run(ctx *Context) error {
4656
return err
4757
}
4858

49-
return j.deleteContainer(container.ID)
59+
if j.Container == "" {
60+
return j.deleteContainer(container.ID)
61+
}
62+
return nil
5063
}
5164

5265
func (j *RunJob) pullImage() error {
@@ -98,6 +111,14 @@ func (j *RunJob) startContainer(e *Execution, c *docker.Container) error {
98111
return j.Client.StartContainer(c.ID, &docker.HostConfig{})
99112
}
100113

114+
func (j *RunJob) getContainer(id string) (*docker.Container, error) {
115+
container, err := j.Client.InspectContainer(id)
116+
if err != nil {
117+
return nil, err
118+
}
119+
return container, nil
120+
}
121+
101122
const (
102123
watchDuration = time.Millisecond * 100
103124
maxProcessDuration = time.Hour * 24

test/run-job/docker-compose.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
version: "3"
2+
3+
services:
4+
ofelia:
5+
build:
6+
dockerfile: Dockerfile
7+
context: ../../.
8+
volumes:
9+
- /var/run/docker.sock:/var/run/docker.sock
10+
- ./ofelia.ini:/etc/ofelia/config.ini
11+
12+
job:
13+
image: hello-world

test/run-job/ofelia.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[job-run"job"]
2+
schedule = "*/1 * * * *"
3+
container = ofelia_job_1

0 commit comments

Comments
 (0)