Skip to content

Commit 6117530

Browse files
davidphaynathanlcarlson
authored andcommitted
Install compose as plugin on linux
1 parent 2824c94 commit 6117530

File tree

4 files changed

+175
-157
lines changed

4 files changed

+175
-157
lines changed

lib/puppet/provider/docker_compose/ruby.rb

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
has_command(:docker, 'docker')
1111

12-
has_command(:dockercompose, 'docker-compose')
12+
has_command(:dockercompose, 'docker')
1313

1414
def set_tmpdir
1515
return unless resource[:tmpdir]
@@ -28,8 +28,8 @@ def exists?
2828
set_tmpdir
2929

3030
# get merged config using docker-compose config
31-
args = [compose_files, '-p', name, 'config'].insert(3, resource[:options]).compact
32-
compose_output = Puppet::Util::Yaml.safe_load(execute([command(:dockercompose)] + args, combine: false), [Symbol])
31+
args = ['compose', compose_files, '-p', name, 'config'].insert(3, resource[:options]).compact
32+
compose_output = Puppet::Util::Yaml.safe_load(execute([command(:docker)] + args, combine: false), [Symbol])
3333

3434
containers = docker([
3535
'ps',
@@ -76,32 +76,32 @@ def get_image(service_name, compose_services)
7676

7777
def create
7878
Puppet.info("Running compose project #{name}")
79-
args = [compose_files, '-p', name, 'up', '-d', '--remove-orphans'].insert(3, resource[:options]).insert(5, resource[:up_args]).compact
80-
dockercompose(args)
79+
args = ['compose', compose_files, '-p', name, 'up', '-d', '--remove-orphans'].insert(3, resource[:options]).insert(5, resource[:up_args]).compact
80+
docker(args)
8181
return unless resource[:scale]
8282

8383
instructions = resource[:scale].map { |k, v| "#{k}=#{v}" }
8484
Puppet.info("Scaling compose project #{name}: #{instructions.join(' ')}")
85-
args = [compose_files, '-p', name, 'scale'].insert(3, resource[:options]).compact + instructions
86-
dockercompose(args)
85+
args = ['compose', compose_files, '-p', name, 'scale'].insert(3, resource[:options]).compact + instructions
86+
docker(args)
8787
end
8888

8989
def destroy
9090
Puppet.info("Removing all containers for compose project #{name}")
91-
kill_args = [compose_files, '-p', name, 'kill'].insert(3, resource[:options]).compact
92-
dockercompose(kill_args)
93-
rm_args = [compose_files, '-p', name, 'rm', '--force', '-v'].insert(3, resource[:options]).compact
94-
dockercompose(rm_args)
91+
kill_args = ['compose', compose_files, '-p', name, 'kill'].insert(3, resource[:options]).compact
92+
docker(kill_args)
93+
rm_args = ['compose', compose_files, '-p', name, 'rm', '--force', '-v'].insert(3, resource[:options]).compact
94+
docker(rm_args)
9595
end
9696

9797
def restart
9898
return unless exists?
9999

100100
Puppet.info("Rebuilding and Restarting all containers for compose project #{name}")
101-
kill_args = [compose_files, '-p', name, 'kill'].insert(3, resource[:options]).compact
102-
dockercompose(kill_args)
103-
build_args = [compose_files, '-p', name, 'build'].insert(3, resource[:options]).compact
104-
dockercompose(build_args)
101+
kill_args = ['compose', compose_files, '-p', name, 'kill'].insert(3, resource[:options]).compact
102+
docker(kill_args)
103+
build_args = ['compose', compose_files, '-p', name, 'build'].insert(3, resource[:options]).compact
104+
docker(build_args)
105105
create
106106
end
107107

manifests/compose.pp

Lines changed: 82 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -42,103 +42,107 @@
4242
Optional[String] $raw_url = undef,
4343
Optional[Boolean] $curl_ensure = $docker::params::curl_ensure,
4444
) inherits docker::params {
45-
if $facts['os']['family'] == 'windows' {
46-
$file_extension = '.exe'
47-
$file_owner = 'Administrator'
48-
} else {
49-
$file_extension = ''
50-
$file_owner = 'root'
51-
}
5245

53-
$docker_compose_location = "${install_path}/${symlink_name}${file_extension}"
54-
$docker_compose_location_versioned = "${install_path}/docker-compose-${version}${file_extension}"
55-
$docker_plugins_path = '/usr/local/lib/docker/cli-plugins'
56-
57-
if $ensure == 'present' {
58-
if $raw_url != undef {
59-
$docker_compose_url = $raw_url
60-
} else {
61-
if $version =~ /2[.]\d+[.]\d+$/ {
62-
$version_prepath = 'v'
46+
if $facts['kernel'] == 'Linux' {
47+
case $facts['os']['family'] {
48+
'Debian': {
49+
ensure_packages('docker-compose-plugin', { ensure => pick($version,$ensure), require => defined(bool2str($docker::use_upstream_package_source)) ? { true => Apt::Source['docker'], false => undef } }) #lint:ignore:140chars
6350
}
64-
65-
$docker_compose_url = "${base_url}/${version_prepath}${version}/docker-compose-${facts['kernel']}-${facts['os']['hardware']}${file_extension}"
51+
'RedHat': {
52+
ensure_packages('docker-compose-plugin', { ensure => pick($version,$ensure), require => defined(bool2str($docker::use_upstream_package_source)) ? { true => Yumrepo['docker'], false => undef } }) #lint:ignore:140chars lint:ignore:unquoted_string_in_selector
53+
}
54+
default: {}
6655
}
67-
68-
if $proxy != undef {
69-
$proxy_opt = "--proxy ${proxy}"
56+
} else {
57+
# mac & Windows OS
58+
if $facts['os']['family'] == 'windows' {
59+
$file_extension = '.exe'
60+
$file_owner = 'Administrator'
7061
} else {
71-
$proxy_opt = ''
62+
$file_extension = ''
63+
$file_owner = 'root'
7264
}
7365

74-
if $facts['os']['family'] == 'windows' {
75-
$docker_download_command = "if (Invoke-WebRequest ${docker_compose_url} ${proxy_opt} -UseBasicParsing -OutFile \"${docker_compose_location_versioned}\") { exit 0 } else { exit 1}" # lint:ignore:140chars
66+
$docker_compose_location = "${install_path}/${symlink_name}${file_extension}"
7667

77-
$parameters = {
78-
'proxy' => $proxy,
79-
'docker_compose_url' => $docker_compose_url,
80-
'docker_compose_location_versioned' => $docker_compose_location_versioned,
81-
}
68+
if $version == 'latest' {
69+
$version = "2.20.2"
70+
}
8271

83-
exec { "Install Docker Compose ${version}":
84-
command => epp('docker/windows/download_docker_compose.ps1.epp', $parameters),
85-
provider => powershell,
86-
creates => $docker_compose_location_versioned,
87-
}
72+
$docker_compose_location_versioned = "${install_path}/docker-compose-${version}${file_extension}"
8873

89-
file { $docker_compose_location:
90-
ensure => 'link',
91-
target => $docker_compose_location_versioned,
92-
require => Exec["Install Docker Compose ${version}"],
93-
}
94-
} else {
95-
if $curl_ensure {
96-
stdlib::ensure_packages(['curl'])
97-
}
74+
if $ensure == 'present' {
75+
if $raw_url != undef {
76+
$docker_compose_url = $raw_url
77+
} else {
78+
if $version =~ /2[.]\d+[.]\d+$/ {
79+
$version_prepath = 'v'
80+
}
9881

99-
exec { "Install Docker Compose ${version}":
100-
path => '/usr/bin/',
101-
cwd => '/tmp',
102-
command => "curl -s -S -L ${proxy_opt} ${docker_compose_url} -o ${docker_compose_location_versioned}",
103-
creates => $docker_compose_location_versioned,
104-
require => Package['curl'],
82+
$docker_compose_url = "${base_url}/${version_prepath}${version}/docker-compose-${facts['kernel']}-${facts['os']['hardware']}${file_extension}"
10583
}
10684

107-
file { '/usr/local/lib/docker':
108-
ensure => directory,
85+
if $proxy != undef {
86+
$proxy_opt = "--proxy ${proxy}"
87+
} else {
88+
$proxy_opt = ''
10989
}
11090

111-
file { $docker_plugins_path:
112-
ensure => directory,
113-
require => File['/usr/local/lib/docker'],
114-
}
91+
if $facts['os']['family'] == 'windows' {
92+
$docker_download_command = "if (Invoke-WebRequest ${docker_compose_url} ${proxy_opt} -UseBasicParsing -OutFile \"${docker_compose_location_versioned}\") { exit 0 } else { exit 1}" # lint:ignore:140chars
11593

94+
$parameters = {
95+
'proxy' => $proxy,
96+
'docker_compose_url' => $docker_compose_url,
97+
'docker_compose_location_versioned' => $docker_compose_location_versioned,
98+
}
99+
100+
exec { "Install Docker Compose ${version}":
101+
command => epp('docker/windows/download_docker_compose.ps1.epp', $parameters),
102+
provider => powershell,
103+
creates => $docker_compose_location_versioned,
104+
}
105+
106+
file { $docker_compose_location:
107+
ensure => 'link',
108+
target => $docker_compose_location_versioned,
109+
require => Exec["Install Docker Compose ${version}"],
110+
}
111+
} else {
112+
if $curl_ensure {
113+
stdlib::ensure_packages(['curl'])
114+
}
115+
116+
exec { "Install Docker Compose ${version}":
117+
path => '/usr/bin/',
118+
cwd => '/tmp',
119+
command => "curl -s -S -L ${proxy_opt} ${docker_compose_url} -o ${docker_compose_location_versioned}",
120+
creates => $docker_compose_location_versioned,
121+
require => Package['curl'],
122+
}
123+
124+
file { $docker_compose_location_versioned:
125+
owner => $file_owner,
126+
mode => '0755',
127+
seltype => 'container_runtime_exec_t',
128+
require => Exec["Install Docker Compose ${version}"],
129+
}
130+
131+
file { $docker_compose_location:
132+
ensure => 'link',
133+
target => $docker_compose_location_versioned,
134+
require => File[$docker_compose_location_versioned],
135+
}
136+
}
137+
138+
} else {
116139
file { $docker_compose_location_versioned:
117-
owner => $file_owner,
118-
mode => '0755',
119-
seltype => 'container_runtime_exec_t',
120-
require => Exec["Install Docker Compose ${version}"],
140+
ensure => absent,
121141
}
122-
142+
123143
file { $docker_compose_location:
124-
ensure => 'link',
125-
target => $docker_compose_location_versioned,
126-
require => File[$docker_compose_location_versioned],
144+
ensure => absent,
127145
}
128-
129-
file { "${docker_plugins_path}/docker-compose":
130-
ensure => 'link',
131-
target => $docker_compose_location_versioned,
132-
require => File[$docker_plugins_path],
133-
}
134-
}
135-
} else {
136-
file { $docker_compose_location_versioned:
137-
ensure => absent,
138-
}
139-
140-
file { $docker_compose_location:
141-
ensure => absent,
142146
}
143147
}
144148
}

manifests/params.pp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
$proxy = undef
5050
$compose_base_url = 'https://github.com/docker/compose/releases/download'
5151
$compose_symlink_name = 'docker-compose'
52+
$compose_version = 'latest'
53+
$compose_install_path = undef
5254
$no_proxy = undef
5355
$execdriver = undef
5456
$storage_driver = undef
@@ -91,15 +93,12 @@
9193

9294
if ($facts['os']['family'] == 'windows') {
9395
$compose_install_path = "${facts['docker_program_files_path']}/Docker"
94-
$compose_version = '2.16.0'
9596
$docker_ee_package_name = 'Docker'
9697
$machine_install_path = "${facts['docker_program_files_path']}/Docker"
9798
$tls_cacert = "${facts['docker_program_data_path']}/docker/certs.d/ca.pem"
9899
$tls_cert = "${facts['docker_program_data_path']}/docker/certs.d/server-cert.pem"
99100
$tls_key = "${facts['docker_program_data_path']}/docker/certs.d/server-key.pem"
100101
} else {
101-
$compose_install_path = '/usr/local/bin'
102-
$compose_version = '2.16.0'
103102
$docker_ee_package_name = 'docker-ee'
104103
$machine_install_path = '/usr/local/bin'
105104
$tls_cacert = '/etc/docker/tls/ca.pem'

0 commit comments

Comments
 (0)