Skip to content

Commit d47c454

Browse files
committed
Support autoPull on the build configuration
1 parent 1da5d29 commit d47c454

File tree

7 files changed

+67
-9
lines changed

7 files changed

+67
-9
lines changed

doc/changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
- Migrate from joda-time to java.time ([#1025](https://github.com/fabric8io/docker-maven-plugin/issues/1025))
77
The handling of Y changes when the week straddle the New year ([Stack Overflow](https://stackoverflow.com/questions/26431882/difference-between-year-of-era-and-week-based-year))
88
- Fix JSON error when parsin tafs (#1354)
9+
- Support to autoPull in build configuration (#626)
910
- Add `skipPush` option to build image configuration ([#1243](https://github.com/fabric8io/docker-maven-plugin/issues/1243))
1011
- docker.container.<alias>.ip property is no longer set ([#1242](https://github.com/fabric8io/docker-maven-plugin/issues/1242))
1112
- Support `squash` in build options to squash newly built layers into a single layer ([#785](https://github.com/fabric8io/docker-maven-plugin/issues/785))

src/main/asciidoc/inc/build/_configuration.adoc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ endif::[]
7171

7272
A provided `<from>` takes precedence over the name given here. This tag is useful for extensions of this plugin like the https://maven.fabric8.io[fabric8-maven-plugin] which can evaluate the additional information given here.
7373

74+
| *autoPull*
75+
| Whether we need to pull a newer version of image.
76+
7477
| <<build-healthcheck, *healthCheck*>>
7578
| Definition of a health check as described in <<build-healthcheck, Healthcheck>>
7679

@@ -139,6 +142,7 @@ remote API.
139142
<build>
140143
<from>java:8u40</from>
141144
<maintainer>[email protected]</maintainer>
145+
<autoPull>true</autoPull>
142146
<tags>
143147
<tag>latest</tag>
144148
<tag>${project.version}</tag>

src/main/java/io/fabric8/maven/docker/BuildMojo.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import io.fabric8.maven.docker.access.DockerAccessException;
1414
import io.fabric8.maven.docker.config.BuildImageConfiguration;
1515
import io.fabric8.maven.docker.config.ImageConfiguration;
16+
import io.fabric8.maven.docker.config.ImagePullPolicy;
1617
import io.fabric8.maven.docker.service.BuildService;
1718
import io.fabric8.maven.docker.service.ImagePullManager;
1819
import io.fabric8.maven.docker.service.ServiceHub;
@@ -74,7 +75,7 @@ protected void buildAndTag(ServiceHub hub, ImageConfiguration imageConfig)
7475
EnvUtil.storeTimestamp(getBuildTimestampFile(), getBuildTimestamp());
7576

7677
BuildService.BuildContext buildContext = getBuildContext();
77-
ImagePullManager pullManager = getImagePullManager(determinePullPolicy(imageConfig.getBuildConfiguration()), autoPull);
78+
ImagePullManager pullManager = getImagePullManager(determinePullPolicy(imageConfig.getBuildConfiguration()), determineAutoPull(imageConfig.getBuildConfiguration()));
7879
BuildService buildService = hub.getBuildService();
7980

8081
File buildArchiveFile = buildService.buildArchive(imageConfig, buildContext, resolveBuildArchiveParameter());
@@ -117,6 +118,10 @@ private String determinePullPolicy(BuildImageConfiguration buildConfig) {
117118
return buildConfig != null && buildConfig.getImagePullPolicy() != null ? buildConfig.getImagePullPolicy() : imagePullPolicy;
118119
}
119120

121+
private String determineAutoPull(BuildImageConfiguration buildConfig) {
122+
return buildConfig != null && buildConfig.getAutoPull() != null ? buildConfig.getAutoPull() : autoPull;
123+
}
124+
120125
/**
121126
* Helper method to process an ImageConfiguration.
122127
*

src/main/java/io/fabric8/maven/docker/access/BuildOptions.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,37 @@
2727
*/
2828
public class BuildOptions {
2929

30-
private Map<String, String> options;
30+
private final Map<String, String> options;
3131

3232
public BuildOptions() {
33-
this(new HashMap<String, String>());
33+
this(new HashMap<>());
3434
}
3535

3636
public BuildOptions(Map<String, String> options) {
37-
this.options = options != null ? new HashMap<>(options) : new HashMap<String, String>();
37+
this.options = options != null ? new HashMap<>(options) : new HashMap<>();
3838
}
3939

4040
public BuildOptions addOption(String key, String value) {
4141
options.put(key,value);
4242
return this;
4343
}
4444

45+
public BuildOptions autoPull(String autoPull) {
46+
if (autoPull != null) {
47+
switch (autoPull.toLowerCase()) {
48+
case "always":
49+
case "true" :
50+
case "ifnotpresent":
51+
options.put("pull", Boolean.TRUE.toString());
52+
break;
53+
case "false":
54+
case "never":
55+
options.put("pull", Boolean.FALSE.toString());
56+
}
57+
}
58+
return this;
59+
}
60+
4561
public BuildOptions dockerfile(String name) {
4662
if (name != null) {
4763
options.put("dockerfile", name);

src/main/java/io/fabric8/maven/docker/config/BuildImageConfiguration.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ public class BuildImageConfiguration implements Serializable {
1818
public static final String DEFAULT_FILTER = "${*}";
1919
public static final String DEFAULT_CLEANUP = "try";
2020

21+
@Parameter
22+
private String autoPull;
23+
2124
/**
2225
* Directory is used as build context.
2326
* If not specified, dockerfile's parent directory is used as build context.
@@ -185,6 +188,10 @@ public boolean isDockerFileMode() {
185188
return dockerFileFile != null;
186189
}
187190

191+
public String getAutoPull() {
192+
return autoPull;
193+
}
194+
188195
public String getLoadNamePattern() {
189196
return loadNamePattern;
190197
}
@@ -422,6 +429,11 @@ public Builder(BuildImageConfiguration that) {
422429
}
423430
}
424431

432+
public Builder autoPull(String autoPull) {
433+
config.autoPull = autoPull;
434+
return this;
435+
}
436+
425437
public Builder contextDir(String dir) {
426438
config.contextDir = dir;
427439
return this;

src/main/java/io/fabric8/maven/docker/service/BuildService.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.util.Properties;
1313
import java.util.regex.PatternSyntaxException;
1414

15+
import io.fabric8.maven.docker.config.ImagePullPolicy;
1516
import org.apache.maven.plugin.MojoExecutionException;
1617
import com.google.common.collect.ImmutableMap;
1718
import com.google.gson.JsonObject;
@@ -172,6 +173,7 @@ protected void buildImage(ImageConfiguration imageConfig, MojoParameters params,
172173
// auto is now supported by docker, consider switching?
173174
BuildOptions opts =
174175
new BuildOptions(buildConfig.getBuildOptions())
176+
.autoPull(calculateAutoPullFromImagePullPolicy(buildConfig.getImagePullPolicy()))
175177
.dockerfile(getDockerfileName(buildConfig))
176178
.forceRemove(cleanupMode.isRemove())
177179
.noCache(noCache)
@@ -442,6 +444,13 @@ private boolean isEmpty(String str) {
442444
return str == null || str.isEmpty();
443445
}
444446

447+
static String calculateAutoPullFromImagePullPolicy(String imagePullPolicy) {
448+
if (imagePullPolicy != null) {
449+
return Boolean.toString(!imagePullPolicy.equals(ImagePullPolicy.Never.name()));
450+
}
451+
return Boolean.FALSE.toString();
452+
}
453+
445454

446455
// ===========================================
447456

src/test/java/io/fabric8/maven/docker/access/BuildConfigTest.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import io.fabric8.maven.docker.util.JsonFactory;
2525

2626
import static org.junit.Assert.assertEquals;
27+
import static org.junit.Assert.assertFalse;
28+
import static org.junit.Assert.assertNull;
2729

2830
/**
2931
* @author roland
@@ -73,6 +75,15 @@ public void dockerfile() {
7375
assertEquals(0, opts.getOptions().size());
7476
}
7577

78+
@Test
79+
public void autoPull() {
80+
BuildOptions opts = new BuildOptions().autoPull("true");
81+
assertEquals("true", opts.getOptions().get("pull"));
82+
83+
opts = new BuildOptions().autoPull(null);
84+
assertFalse(opts.getOptions().containsKey("pull"));
85+
}
86+
7687
@Test
7788
public void buildArgs() {
7889
Map<String,String> args = Collections.singletonMap("arg1","blub");
@@ -96,23 +107,23 @@ public void override() {
96107

97108
@Test
98109
public void cacheFrom() {
99-
BuildOptions opts = new BuildOptions().cacheFrom(Arrays.asList("foo/bar:latest"));
110+
BuildOptions opts = new BuildOptions().cacheFrom(Collections.singletonList("foo/bar:latest"));
100111
assertEquals("[\"foo/bar:latest\"]", opts.getOptions().get("cachefrom"));
101112

102113
opts.cacheFrom(Arrays.asList("foo/bar:latest", "foo/baz:1.0"));
103114
assertEquals("[\"foo/bar:latest\",\"foo/baz:1.0\"]", opts.getOptions().get("cachefrom"));
104115

105-
opts.cacheFrom(Arrays.asList());
106-
assertEquals(null, opts.getOptions().get("cachefrom"));
116+
opts.cacheFrom(Collections.emptyList());
117+
assertNull(opts.getOptions().get("cachefrom"));
107118

108119
opts.cacheFrom(null);
109-
assertEquals(null, opts.getOptions().get("cachefrom"));
120+
assertNull(opts.getOptions().get("cachefrom"));
110121
}
111122

112123
@Test
113124
public void network() {
114125
BuildOptions opts = new BuildOptions().network(null);
115-
assertEquals(null, opts.getOptions().get("networkmode"));
126+
assertNull(opts.getOptions().get("networkmode"));
116127

117128
opts.network("host");
118129
assertEquals("host", opts.getOptions().get("networkmode"));

0 commit comments

Comments
 (0)