Skip to content

Commit 2f56eac

Browse files
committed
Fix #20657: podman compatibility
1 parent 3928c66 commit 2f56eac

File tree

10 files changed

+38
-17
lines changed

10 files changed

+38
-17
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
<log4j.version>2.24.3</log4j.version>
3333
<okhttp.version>4.12.0</okhttp.version>
3434
<fabric8.client.version>7.1.0</fabric8.client.version>
35-
<docker.client.version>7.0.8-OA-3</docker.client.version>
35+
<docker.client.version>7.0.8-OA-4</docker.client.version>
3636
<jersey.version>3.1.10</jersey.version>
3737
<apache.commons.lang3>3.17.0</apache.commons.lang3>
3838
<!-- Plugin versions -->

src/main/kotlin/eu/openanalytics/shinyproxyoperator/impl/docker/CaddyConfig.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import eu.openanalytics.shinyproxyoperator.model.ShinyProxy
3131
import eu.openanalytics.shinyproxyoperator.model.ShinyProxyInstance
3232
import io.github.oshai.kotlinlogging.KotlinLogging
3333
import kotlinx.coroutines.Dispatchers
34+
import kotlinx.coroutines.IO
3435
import kotlinx.coroutines.delay
3536
import kotlinx.coroutines.withContext
3637
import okhttp3.OkHttpClient
@@ -56,7 +57,7 @@ class CaddyConfig(private val dockerClient: DockerClient, mainDataDir: Path, con
5657
private val objectMapper = ObjectMapper()
5758
private val yamlMapper = ObjectMapper(YAMLFactory())
5859
private val fileManager = FileManager()
59-
private val caddyImage: String = config.readConfigValue("caddy:2.8", "SPO_CADDY_IMAGE") { it }
60+
private val caddyImage: String = config.readConfigValue("docker.io/library/caddy:2.8", "SPO_CADDY_IMAGE") { it }
6061
private val enableTls = config.readConfigValue(false, "SPO_CADDY_ENABLE_TLS") { it.toBoolean() }
6162
private val client: OkHttpClient = OkHttpClient.Builder()
6263
.connectTimeout(3, TimeUnit.SECONDS)

src/main/kotlin/eu/openanalytics/shinyproxyoperator/impl/docker/DockerOrchestrator.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import eu.openanalytics.shinyproxyoperator.model.ShinyProxyStatus
4242
import eu.openanalytics.shinyproxyoperator.prettyMessage
4343
import io.github.oshai.kotlinlogging.KotlinLogging
4444
import kotlinx.coroutines.Dispatchers
45+
import kotlinx.coroutines.IO
4546
import kotlinx.coroutines.channels.Channel
4647
import kotlinx.coroutines.withContext
4748
import org.apache.commons.lang3.RandomStringUtils
@@ -66,6 +67,7 @@ class DockerOrchestrator(channel: Channel<ShinyProxyEvent>,
6667
private val inputDir: Path) : IOrchestrator {
6768

6869
private val dockerGID: Int = config.readConfigValue(null, "SPO_DOCKER_GID") { it.toInt() }
70+
private val dockerSocket: String = config.readConfigValue("/var/run/docker.sock", "SPO_DOCKER_SOCKET") { it }
6971
private val disableICC: Boolean = config.readConfigValue(false, "SPO_DISABLE_ICC") { it.toBoolean() }
7072
private val state = mutableMapOf<String, ShinyProxyStatus>()
7173

@@ -93,14 +95,15 @@ class DockerOrchestrator(channel: Channel<ShinyProxyEvent>,
9395
objectMapper.propertyNamingStrategy = PropertyNamingStrategies.KEBAB_CASE
9496
dockerClient = JerseyDockerClientBuilder()
9597
.fromEnv()
98+
.uri("unix://" + dockerSocket)
9699
.readTimeoutMillis(0) // no timeout, needed for startContainer and logs, #32606
97100
.build()
98101
caddyConfig = CaddyConfig(dockerClient, dataDir, config)
99102
dockerActions = DockerActions(dockerClient)
100103
shinyProxyReadyChecker = ShinyProxyReadyChecker(channel, dockerActions, dockerClient, dataDir)
101104
redisConfig = RedisConfig(dockerClient, dockerActions, persistentState, dataDir, config)
102105
craneConfig = CraneConfig(dockerClient, dockerActions, dataDir, inputDir, redisConfig, caddyConfig, persistentState)
103-
monitoringConfig = MonitoringConfig(dockerClient, dockerActions, dataDir, caddyConfig, config)
106+
monitoringConfig = MonitoringConfig(dockerClient, dockerActions, dataDir, caddyConfig, config, dockerSocket)
104107
logFilesCleaner = LogFilesCleaner(dataDir.resolve("logs"), fileManager, dockerActions)
105108
fileManager.createDirectories(dataDir)
106109
eventWriter = FileWriter(dataDir.resolve("events.json").toFile())
@@ -223,7 +226,7 @@ class DockerOrchestrator(channel: Channel<ShinyProxyEvent>,
223226
.networkMode(SHARED_NETWORK_NAME)
224227
.binds(
225228
HostConfig.Bind.builder()
226-
.from("/var/run/docker.sock")
229+
.from(dockerSocket)
227230
.to("/var/run/docker.sock")
228231
.readOnly(true)
229232
.build(),

src/main/kotlin/eu/openanalytics/shinyproxyoperator/impl/docker/RedisConfig.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import eu.openanalytics.shinyproxyoperator.Config
2424
import eu.openanalytics.shinyproxyoperator.FileManager
2525
import io.github.oshai.kotlinlogging.KotlinLogging
2626
import kotlinx.coroutines.Dispatchers
27+
import kotlinx.coroutines.IO
2728
import kotlinx.coroutines.withContext
2829
import org.apache.commons.lang3.RandomStringUtils
2930
import org.mandas.docker.client.DockerClient
@@ -42,7 +43,7 @@ class RedisConfig(private val dockerClient: DockerClient,
4243
private val dataDir: Path = mainDataDir.resolve(containerName)
4344
private lateinit var redisPassword: String
4445
private val logger = KotlinLogging.logger {}
45-
private val redisImage: String = config.readConfigValue("redis:7.2.4", "SPO_REDIS_IMAGE") { it }
46+
private val redisImage: String = config.readConfigValue("docker.io/library/redis:7.2.4", "SPO_REDIS_IMAGE") { it }
4647
private val fileManager = FileManager()
4748

4849
fun init() {

src/main/kotlin/eu/openanalytics/shinyproxyoperator/impl/docker/monitoring/CAdvisorConfig.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import org.mandas.docker.client.messages.ContainerConfig
2929
import org.mandas.docker.client.messages.Device
3030
import org.mandas.docker.client.messages.HostConfig
3131

32-
class CAdvisorConfig(private val dockerClient: DockerClient, private val dockerActions: DockerActions, config: Config) {
32+
class CAdvisorConfig(private val dockerClient: DockerClient, private val dockerActions: DockerActions, config: Config, private val dockerSocket: String) {
3333

3434
private val logger = KotlinLogging.logger {}
3535
private val cAdvisorImage: String = config.readConfigValue("gcr.io/cadvisor/cadvisor:v0.49.1", "SPO_CADVISOR_IMAGE") { it }
@@ -49,7 +49,7 @@ class CAdvisorConfig(private val dockerClient: DockerClient, private val dockerA
4949
.networkMode(DockerOrchestrator.SHARED_NETWORK_NAME)
5050
.binds(
5151
HostConfig.Bind.builder()
52-
.from("/var/run/docker.sock")
52+
.from(dockerSocket)
5353
.to("/var/run/docker.sock")
5454
.readOnly(true)
5555
.build(),

src/main/kotlin/eu/openanalytics/shinyproxyoperator/impl/docker/monitoring/GrafanaConfig.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import java.nio.file.Path
3737
class GrafanaConfig(private val dockerClient: DockerClient, private val dockerActions: DockerActions, private val mainDataDir: Path, private val caddyConfig: CaddyConfig, config: Config) {
3838

3939
private val logger = KotlinLogging.logger {}
40-
private val grafanaImage: String = config.readConfigValue("grafana/grafana-oss:11.5.1", "SPO_GRAFANA_IMAGE") { it }
40+
private val grafanaImage: String = config.readConfigValue("docker.io/grafana/grafana-oss:11.5.1", "SPO_GRAFANA_IMAGE") { it }
4141
private val grafanaRole: String = config.readConfigValue("Viewer", "SPO_GRAFANA_ROLE") { it }
4242
private val fileManager = FileManager()
4343

src/main/kotlin/eu/openanalytics/shinyproxyoperator/impl/docker/monitoring/GrafanaLokiConfig.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import java.nio.file.Path
3434
class GrafanaLokiConfig(private val dockerClient: DockerClient, private val dockerActions: DockerActions, mainDataDir: Path, config: Config) {
3535

3636
private val logger = KotlinLogging.logger {}
37-
private val lokiImage: String = config.readConfigValue("grafana/loki:3.2.2", "SPO_GRAFANA_GRAFANA_IMAGE") { it }
37+
private val lokiImage: String = config.readConfigValue("docker.io/grafana/loki:3.2.2", "SPO_GRAFANA_GRAFANA_IMAGE") { it }
3838
private val fileManager = FileManager()
3939
private val containerName = "sp-grafana-loki"
4040
private val dataDir: Path = mainDataDir.resolve(containerName)

src/main/kotlin/eu/openanalytics/shinyproxyoperator/impl/docker/monitoring/MonitoringConfig.kt

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,29 @@ import eu.openanalytics.shinyproxyoperator.Config
2424
import eu.openanalytics.shinyproxyoperator.impl.docker.CaddyConfig
2525
import eu.openanalytics.shinyproxyoperator.impl.docker.DockerActions
2626
import eu.openanalytics.shinyproxyoperator.model.ShinyProxy
27+
import io.github.oshai.kotlinlogging.KotlinLogging
2728
import org.mandas.docker.client.DockerClient
2829
import java.nio.file.Path
2930

30-
class MonitoringConfig(dockerClient: DockerClient, dockerActions: DockerActions, mainDataDir: Path, caddyConfig: CaddyConfig, config: Config) {
31-
32-
private val enableMonitoring = config.readConfigValue(false, "SPO_ENABLE_MONITORING") { it.toBoolean() }
31+
class MonitoringConfig(dockerClient: DockerClient, dockerActions: DockerActions, mainDataDir: Path, caddyConfig: CaddyConfig, config: Config, dockerSocket: String) {
3332

33+
private val logger = KotlinLogging.logger { }
34+
private val enableMonitoring: Boolean
3435
internal val grafanaLokiConfig = GrafanaLokiConfig(dockerClient, dockerActions, mainDataDir, config)
35-
private val prometheusConfig = PrometheusConfig(dockerClient, dockerActions, mainDataDir, config)
36-
private val cAdvisorConfig = CAdvisorConfig(dockerClient, dockerActions, config)
36+
private val prometheusConfig = PrometheusConfig(dockerClient, dockerActions, mainDataDir, config, dockerSocket)
37+
private val cAdvisorConfig = CAdvisorConfig(dockerClient, dockerActions, config, dockerSocket)
3738
internal val grafanaConfig = GrafanaConfig(dockerClient, dockerActions, mainDataDir, caddyConfig, config)
3839

40+
init {
41+
val enableMonitoringConfig = config.readConfigValue(false, "SPO_ENABLE_MONITORING") { it.toBoolean() }
42+
if (enableMonitoringConfig && isPodman()) {
43+
logger.warn { "Monitoring is not supported on podman. Continuing without monitoring." }
44+
enableMonitoring = false
45+
} else {
46+
enableMonitoring = enableMonitoringConfig
47+
}
48+
}
49+
3950
suspend fun reconcile(shinyProxy: ShinyProxy) {
4051
if (enableMonitoring) {
4152
grafanaLokiConfig.reconcile()
@@ -49,4 +60,8 @@ class MonitoringConfig(dockerClient: DockerClient, dockerActions: DockerActions,
4960
return enableMonitoring
5061
}
5162

63+
private fun isPodman(): Boolean {
64+
return System.getenv("container") == "podman"
65+
}
66+
5267
}

src/main/kotlin/eu/openanalytics/shinyproxyoperator/impl/docker/monitoring/PrometheusConfig.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ import org.mandas.docker.client.messages.ContainerConfig
3030
import org.mandas.docker.client.messages.HostConfig
3131
import java.nio.file.Path
3232

33-
class PrometheusConfig(private val dockerClient: DockerClient, private val dockerActions: DockerActions, mainDataDir: Path, config: Config) {
33+
class PrometheusConfig(private val dockerClient: DockerClient, private val dockerActions: DockerActions, mainDataDir: Path, config: Config, private val dockerSocket: String) {
3434

3535
private val logger = KotlinLogging.logger {}
3636
private val dockerGID = config.readConfigValue(null, "SPO_DOCKER_GID") { it.toInt() }
37-
private val prometheusImage: String = config.readConfigValue("prom/prometheus:v3.0.1", "SPO_PROMETHEUS_IMAGE") { it }
37+
private val prometheusImage: String = config.readConfigValue("docker.io/prom/prometheus:v3.0.1", "SPO_PROMETHEUS_IMAGE") { it }
3838
private val fileManager = FileManager()
3939
private val containerName = "sp-prometheus"
4040
private val dataDir: Path = mainDataDir.resolve(containerName)
@@ -59,7 +59,7 @@ class PrometheusConfig(private val dockerClient: DockerClient, private val docke
5959
.networkMode(DockerOrchestrator.SHARED_NETWORK_NAME)
6060
.binds(
6161
HostConfig.Bind.builder()
62-
.from("/var/run/docker.sock")
62+
.from(dockerSocket)
6363
.to("/var/run/docker.sock")
6464
.readOnly(true)
6565
.build(),

src/test/kotlin/eu/openanalytics/shinyproxyoperator/impl/docker/helpers/IntegrationTestBase.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ abstract class IntegrationTestBase {
7070
protected val scope = CoroutineScope(Dispatchers.Default)
7171
val dockerClient: DockerClient = JerseyDockerClientBuilder()
7272
.fromEnv()
73+
.uri("unix://" + Config().readConfigValue("/var/run/docker.sock", "SPO_DOCKER_SOCKET") { it })
7374
.readTimeoutMillis(0) // no timeout, needed for startContainer and logs, #32606
7475
.build()
7576
protected val dockerActions = DockerActions(dockerClient)

0 commit comments

Comments
 (0)