From 98f5c1e40229c9a8b4edd37f33a862bb15d1e99b Mon Sep 17 00:00:00 2001 From: "Michael N. Lipp" Date: Wed, 10 Apr 2024 11:14:32 +0200 Subject: [PATCH] Experimental spice proxy provider. --- settings.gradle | 1 + spice-squid/.checkstyle | 10 +++ spice-squid/.eclipse-pmd | 7 ++ spice-squid/.settings/net.sf.jautodoc.prefs | 8 ++ .../org.eclipse.buildship.core.prefs | 13 ++++ .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.core.runtime.prefs | 2 + spice-squid/Containerfile | 11 +++ spice-squid/build.gradle | 77 +++++++++++++++++++ spice-squid/run.sh | 19 +++++ spice-squid/squid.conf | 4 + 11 files changed, 154 insertions(+) create mode 100644 spice-squid/.checkstyle create mode 100644 spice-squid/.eclipse-pmd create mode 100644 spice-squid/.settings/net.sf.jautodoc.prefs create mode 100644 spice-squid/.settings/org.eclipse.buildship.core.prefs create mode 100644 spice-squid/.settings/org.eclipse.core.resources.prefs create mode 100644 spice-squid/.settings/org.eclipse.core.runtime.prefs create mode 100644 spice-squid/Containerfile create mode 100644 spice-squid/build.gradle create mode 100755 spice-squid/run.sh create mode 100644 spice-squid/squid.conf diff --git a/settings.gradle b/settings.gradle index cb613b6..cf075af 100644 --- a/settings.gradle +++ b/settings.gradle @@ -16,3 +16,4 @@ include 'org.jdrupes.vmoperator.vmconlet' include 'org.jdrupes.vmoperator.runner.qemu' include 'org.jdrupes.vmoperator.common' include 'org.jdrupes.vmoperator.util' +include 'spice-squid' diff --git a/spice-squid/.checkstyle b/spice-squid/.checkstyle new file mode 100644 index 0000000..7f2c604 --- /dev/null +++ b/spice-squid/.checkstyle @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/spice-squid/.eclipse-pmd b/spice-squid/.eclipse-pmd new file mode 100644 index 0000000..8b394f8 --- /dev/null +++ b/spice-squid/.eclipse-pmd @@ -0,0 +1,7 @@ + + + + + + + diff --git a/spice-squid/.settings/net.sf.jautodoc.prefs b/spice-squid/.settings/net.sf.jautodoc.prefs new file mode 100644 index 0000000..03e8200 --- /dev/null +++ b/spice-squid/.settings/net.sf.jautodoc.prefs @@ -0,0 +1,8 @@ +add_header=true +eclipse.preferences.version=1 +header_text=/*\n * VM-Operator\n * Copyright (C) 2024 Michael N. Lipp\n * \n * This program is free software\: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n */ +project_specific_settings=true +replacements=\n\n\nReturns the\nSets the\nAdds the\nEdits the\nRemoves the\nInits the\nParses the\nCreates the\nBuilds the\nChecks if is\nPrints the\nChecks for\n\n\n +visibility_package=false +visibility_private=false +visibility_protected=false diff --git a/spice-squid/.settings/org.eclipse.buildship.core.prefs b/spice-squid/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..258eb47 --- /dev/null +++ b/spice-squid/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir=.. +eclipse.preferences.version=1 +gradle.user.home= +java.home= +jvm.arguments= +offline.mode=false +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/spice-squid/.settings/org.eclipse.core.resources.prefs b/spice-squid/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/spice-squid/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/spice-squid/.settings/org.eclipse.core.runtime.prefs b/spice-squid/.settings/org.eclipse.core.runtime.prefs new file mode 100644 index 0000000..5a0ad22 --- /dev/null +++ b/spice-squid/.settings/org.eclipse.core.runtime.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +line.separator=\n diff --git a/spice-squid/Containerfile b/spice-squid/Containerfile new file mode 100644 index 0000000..b65b631 --- /dev/null +++ b/spice-squid/Containerfile @@ -0,0 +1,11 @@ +FROM alpine:3.19 + +RUN apk update &&\ + apk add --no-cache inotify-tools &&\ + apk add --no-cache squid + +COPY run.sh /usr/local/bin/run-squid.sh + +CMD ["/usr/local/bin/run-squid.sh"] + +EXPOSE 3128 diff --git a/spice-squid/build.gradle b/spice-squid/build.gradle new file mode 100644 index 0000000..2cb7183 --- /dev/null +++ b/spice-squid/build.gradle @@ -0,0 +1,77 @@ +plugins { + id 'org.jdrupes.vmoperator.java-application-conventions' +} + +dependencies { +} + +task buildImage(type: Exec) { + inputs.files 'Containerfile' + + commandLine 'podman', 'build', '--pull', + '-t', "${project.name}:${project.version}",\ + '-f', 'Containerfile', '.' +} + +task tagLatestImage(type: Exec) { + dependsOn buildImage + + enabled = !project.version.contains("SNAPSHOT") + && !project.version.contains("alpha") \ + && !project.version.contains("beta") \ + || project.rootProject.properties['docker.testRegistry'] \ + && project.rootProject.properties['docker.registry'] \ + == project.rootProject.properties['docker.testRegistry'] + + commandLine 'podman', 'tag', "${project.name}:${project.version}",\ + "${project.name}:latest" +} + +task buildLatestImage { + dependsOn buildImage + dependsOn tagLatestImage +} + +task pushImage(type: Exec) { + dependsOn buildImage + + commandLine 'podman', 'push', '--tls-verify=false', \ + "localhost/${project.name}:${project.version}", \ + "${project.rootProject.properties['docker.registry']}" \ + + "/${project.name}:${project.version}" +} + +task pushLatestImage(type: Exec) { + dependsOn buildLatestImage + + enabled = !project.version.contains("SNAPSHOT") + && !project.version.contains("alpha") \ + && !project.version.contains("beta") \ + || project.rootProject.properties['docker.testRegistry'] \ + && project.rootProject.properties['docker.registry'] \ + == project.rootProject.properties['docker.testRegistry'] + + commandLine 'podman', 'push', '--tls-verify=false', \ + "localhost/${project.name}:${project.version}", \ + "${project.rootProject.properties['docker.registry']}" \ + + "/${project.name}:latest" +} + +task pushImages { + // Don't push without testing first + dependsOn pushImage + dependsOn pushLatestImage +} + +test { + enabled = project.hasProperty("k8s.testCluster") + + useJUnitPlatform() + + testLogging { + showStandardStreams = true + } + + systemProperty "k8s.testCluster", project.hasProperty("k8s.testCluster") + ? project.getProperty("k8s.testCluster") : null +} diff --git a/spice-squid/run.sh b/spice-squid/run.sh new file mode 100755 index 0000000..eddea39 --- /dev/null +++ b/spice-squid/run.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +CONF_OPT="-f /run/etc/squid/squid.conf" +/usr/sbin/squid $CONF_OPT + +inotifywait -m -e create -r /run/etc/squid | + while read file_path file_event file_name; do + if [ "$file_event" != "CREATE" ]; then + continue + fi + if [ -r /run/squid/squid.pid ]; then + echo "Reconfiguring squid" + /usr/sbin/squid $CONF_OPT -k reconfigure + else + echo "Restarting squid" + /usr/sbin/squid $CONF_OPT + fi + echo "Processed event" + done diff --git a/spice-squid/squid.conf b/spice-squid/squid.conf new file mode 100644 index 0000000..724b0df --- /dev/null +++ b/spice-squid/squid.conf @@ -0,0 +1,4 @@ +http_access deny all + +# Squid normally listens to port 3128 +http_port 3128