Skip to content

Commit 4133461

Browse files
authored
Option to disable a specific container to be resolved from DPS (#672)
1 parent f02c3ba commit 4133461

File tree

21 files changed

+155
-50
lines changed

21 files changed

+155
-50
lines changed

RELEASE-NOTES.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
## 5.7.0 Alpha
1+
## 5.8.0
22
* DNS over HTTPS, see #138
3+
* Option to disable a specific container to be resolved from DPS, see #596.
34

45
## 5.6.2
56
* Fixing Getting Non-authoritative answer when unexpected, see #608.

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version=5.7.0-snapshot
1+
version=5.8.0-snapshot

src/main/java/com/mageddo/dataformat/env/EnvMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ private Object convertValue(final String rawValue) {
169169
if ("null".equalsIgnoreCase(value)) {
170170
return null;
171171
}
172-
if ("true".equalsIgnoreCase(value) || "false".equalsIgnoreCase(value)) {
172+
if ("true".equalsIgnoreCase(value) || "false".equalsIgnoreCase(value) || "1".equals(value)) {
173173
return Boolean.valueOf(value);
174174
}
175175

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.mageddo.dnsproxyserver.docker;
2+
3+
import com.github.dockerjava.api.model.Container;
4+
import com.mageddo.dnsproxyserver.docker.application.Labels;
5+
import com.mageddo.dnsproxyserver.solver.docker.Label;
6+
7+
public class ContainerPredicates {
8+
9+
public static boolean isEnabledForDPS(Container c) {
10+
return Labels.findBoolean(c, Label.DPS_CONTAINER_ENABLED, true);
11+
}
12+
13+
}

src/main/java/com/mageddo/dnsproxyserver/docker/application/Labels.java

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,44 @@
11
package com.mageddo.dnsproxyserver.docker.application;
22

33
import java.util.Map;
4+
import java.util.Objects;
45

56
import com.github.dockerjava.api.command.InspectContainerResponse;
7+
import com.github.dockerjava.api.model.Container;
68
import com.github.dockerjava.api.model.ContainerConfig;
9+
import com.mageddo.dnsproxyserver.utils.Booleans;
710

811
public class Labels {
912

1013
public static final String SERVICE_NAME_LABEL = "com.docker.compose.service";
1114

12-
public static String findLabelValue(ContainerConfig c, String label) {
13-
return findLabelValue(c.getLabels(), label);
15+
public static String findValue(Container c, String label) {
16+
if (c == null) {
17+
return null;
18+
}
19+
return findValue(c.getLabels(), label);
20+
}
21+
22+
public static boolean findBoolean(Container c, String label) {
23+
return findBoolean(c, label, false);
24+
}
25+
26+
public static boolean findBoolean(Container c, String label, boolean defaultValue) {
27+
return Objects.requireNonNullElse(
28+
Booleans.parse(findValue(c, label)),
29+
defaultValue
30+
);
31+
}
32+
33+
public static String findValue(ContainerConfig c, String label) {
34+
return findValue(c.getLabels(), label);
1435
}
1536

16-
public static String findLabelValue(InspectContainerResponse inspect, String label) {
17-
return findLabelValue(inspect.getConfig(), label);
37+
public static String findValue(InspectContainerResponse inspect, String label) {
38+
return findValue(inspect.getConfig(), label);
1839
}
1940

20-
public static String findLabelValue(Map<String, String> labels, String label) {
41+
public static String findValue(Map<String, String> labels, String label) {
2142
if (labels == null) {
2243
return null;
2344
}

src/main/java/com/mageddo/dnsproxyserver/docker/dataprovider/ContainerFacade.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ public interface ContainerFacade {
1717
InspectContainerResponse safeInspect(String id);
1818

1919
Stream<InspectContainerResponse> inspectFilteringValidContainers(List<Container> containers);
20+
2021
}

src/main/java/com/mageddo/dnsproxyserver/docker/dataprovider/ContainerFacadeDefault.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,12 @@ public Container findById(String containerId) {
3939

4040
@Override
4141
public List<Container> findActiveContainers() {
42-
final var activeContainers = this.dockerClient
42+
return this.dockerClient
4343
.listContainersCmd()
4444
.withStatusFilter(Containers.RUNNING_STATUS_LIST)
4545
.withLimit(1024)
4646
// .withNetworkFilter()
4747
.exec();
48-
return activeContainers;
4948
}
5049

5150
@Override
@@ -72,9 +71,10 @@ public InspectContainerResponse safeInspect(String id) {
7271
public Stream<InspectContainerResponse> inspectFilteringValidContainers(List<Container> containers) {
7372
return containers
7473
.stream()
75-
.map(com.github.dockerjava.api.model.Container::getId)
74+
.map(Container::getId)
7675
.map(this::safeInspect)
7776
.filter(Objects::nonNull)
7877
;
7978
}
79+
8080
}

src/main/java/com/mageddo/dnsproxyserver/solver/docker/ContainerCompact.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212
public class ContainerCompact {
1313

1414
@NonNull
15-
private String id;
15+
String id;
1616

1717
@NonNull
18-
private String name;
18+
String name;
1919

2020
@NonNull
21-
private Boolean dpsContainer;
21+
Boolean dpsContainer;
2222

2323
public boolean isNotDpsContainer() {
2424
return !this.dpsContainer;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.mageddo.dnsproxyserver.solver.docker;
2+
3+
public class Label {
4+
public static final String DPS_DEFAULT_NETWORK = "dps.network";
5+
public static final String DPS_CONTAINER = "dps.container";
6+
public static final String DPS_CONTAINER_ENABLED = "dps.container.enabled";
7+
}

src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/DockerNetworkService.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,17 @@ public List<String> disconnectContainers(String id) {
3838

3939
public void connectContainerTo(String networkName, String containerId) {
4040
if (this.dpsContainerDAO.isDpsContainer(containerId)) {
41-
log.info("status=won't connect dps container using conventional mode, containerId={}",
41+
log.info(
42+
"status=won't connect dps container using conventional mode, containerId={}",
4243
containerId
4344
);
4445
return;
46+
} else if (!this.containerDAO.isEnabledForDPS(containerId)) {
47+
log.info(
48+
"status=wontConnectToNetwork, reason=disabledForDps, network={}, containerId={}",
49+
networkName, containerId
50+
);
51+
return;
4552
}
4653
final var status = this.networkDAO.connect(networkName, containerId);
4754
log.info("status={}, networkName={}, containerId={}", status, networkName, containerId);

0 commit comments

Comments
 (0)