7
7
8
8
def exists?
9
9
Puppet . info ( "Checking for compose project #{ project } " )
10
- compose_file = YAML . safe_load ( File . read ( name ) )
11
10
compose_services = { }
12
- containers = docker ( [
13
- 'ps' ,
14
- '--format' ,
15
- "{{.Label \" com.docker.compose.service\" }}-{{.Image}}" ,
16
- '--filter' ,
17
- "label=com.docker.compose.project=#{ project } " ,
18
- ] ) . split ( "\n " )
19
- case compose_file [ 'version' ]
20
- when %r{^2(\. [0-3])?$} , %r{^3(\. [0-6])?$}
21
- compose_services = compose_file [ 'services' ]
22
- # in compose v1 "version" parameter is not specified
23
- when nil
24
- compose_services = compose_file
25
- else
26
- raise ( Puppet ::Error , "Unsupported docker compose file syntax version \" #{ compose_file [ 'version' ] } \" !" )
27
- end
11
+ resource [ :compose_files ] . each do |file |
12
+ compose_file = YAML . safe_load ( File . read ( file ) )
13
+ containers = docker ( [
14
+ 'ps' ,
15
+ '--format' ,
16
+ "{{.Label \" com.docker.compose.service\" }}-{{.Image}}" ,
17
+ '--filter' ,
18
+ "label=com.docker.compose.project=#{ project } " ,
19
+ ] ) . split ( "\n " )
20
+ case compose_file [ 'version' ]
21
+ when %r{^2(\. [0-3])?$} , %r{^3(\. [0-6])?$}
22
+ compose_services = compose_services . merge ( compose_file [ 'services' ] )
23
+ # in compose v1 "version" parameter is not specified
24
+ when nil
25
+ compose_services = compose_services . merge ( compose_file )
26
+ else
27
+ raise ( Puppet ::Error , "Unsupported docker compose file syntax version \" #{ compose_file [ 'version' ] } \" !" )
28
+ end
28
29
29
- if compose_services . count != containers . count
30
- return false
31
- end
30
+ if compose_services . count != containers . count
31
+ return false
32
+ end
32
33
33
- counts = Hash [ *compose_services . each . map { |key , array |
34
- image = ( array [ 'image' ] ) ? array [ 'image' ] : get_image ( key , compose_services )
35
- Puppet . info ( "Checking for compose service #{ key } #{ image } " )
36
- [ "#{ key } -#{ image } " , containers . count ( "#{ key } -#{ image } " ) ]
37
- } . flatten ]
34
+ counts = Hash [ *compose_services . each . map { |key , array |
35
+ image = ( array [ 'image' ] ) ? array [ 'image' ] : get_image ( key , compose_services )
36
+ Puppet . info ( "Checking for compose service #{ key } #{ image } " )
37
+ [ "#{ key } -#{ image } " , containers . count ( "#{ key } -#{ image } " ) ]
38
+ } . flatten ]
38
39
39
- # No containers found for the project
40
- if counts . empty? ||
41
- # Containers described in the compose file are not running
42
- counts . any? { |_k , v | v . zero? } ||
43
- # The scaling factors in the resource do not match the number of running containers
44
- resource [ :scale ] && counts . merge ( resource [ :scale ] ) != counts
45
- false
46
- else
47
- true
40
+ # No containers found for the project
41
+ if counts . empty? ||
42
+ # Containers described in the compose file are not running
43
+ counts . any? { |_k , v | v . zero? } ||
44
+ # The scaling factors in the resource do not match the number of running containers
45
+ resource [ :scale ] && counts . merge ( resource [ :scale ] ) != counts
46
+ false
47
+ else
48
+ true
49
+ end
48
50
end
49
51
end
50
52
@@ -62,20 +64,22 @@ def get_image(service_name, compose_services)
62
64
63
65
def create
64
66
Puppet . info ( "Running compose project #{ project } " )
65
- args = [ '-f' , name , 'up' , '-d' , '--remove-orphans' ] . insert ( 2 , resource [ :options ] ) . insert ( 5 , resource [ :up_args ] ) . compact
67
+ compose_files_cmd = resource [ :compose_files ] . map { |x | [ "-f" , x ] } . flatten
68
+ args = [ compose_files_cmd , 'up' , '-d' , '--remove-orphans' ] . insert ( 2 , resource [ :options ] ) . insert ( 5 , resource [ :up_args ] ) . compact
66
69
dockercompose ( args )
67
70
return unless resource [ :scale ]
68
71
instructions = resource [ :scale ] . map { |k , v | "#{ k } =#{ v } " }
69
72
Puppet . info ( "Scaling compose project #{ project } : #{ instructions . join ( ' ' ) } " )
70
- args = [ '-f' , name , 'scale' ] . insert ( 2 , resource [ :options ] ) . compact + instructions
73
+ args = [ compose_files_cmd , 'scale' ] . insert ( 2 , resource [ :options ] ) . compact + instructions
71
74
dockercompose ( args )
72
75
end
73
76
74
77
def destroy
75
78
Puppet . info ( "Removing all containers for compose project #{ project } " )
76
- kill_args = [ '-f' , name , 'kill' ] . insert ( 2 , resource [ :options ] ) . compact
79
+ compose_files_cmd = resource [ :compose_files ] . map { |x | [ "-f" , x ] } . flatten
80
+ kill_args = [ compose_files_cmd , 'kill' ] . insert ( 2 , resource [ :options ] ) . compact
77
81
dockercompose ( kill_args )
78
- rm_args = [ '-f' , name , 'rm' , '--force' , '-v' ] . insert ( 2 , resource [ :options ] ) . compact
82
+ rm_args = [ compose_files_cmd , 'rm' , '--force' , '-v' ] . insert ( 2 , resource [ :options ] ) . compact
79
83
dockercompose ( rm_args )
80
84
end
81
85
@@ -92,6 +96,7 @@ def restart
92
96
private
93
97
94
98
def project
95
- File . basename ( File . dirname ( name ) ) . downcase . gsub ( %r{[^0-9a-z ]}i , '' )
99
+ project = name
100
+ project
96
101
end
97
102
end
0 commit comments